zoukankan      html  css  js  c++  java
  • 爬取赶集网类似数据的几个小技巧

    爬取赶集网数据时发现一些有用的小技巧,不一定用到,先记下来备用。

    一、代理服务器

    有些网站服务器限制访问IP的数量,即1个IP过多的访问网站则会被屏蔽,这是就需要设置多个代理地址,来模拟多IP访问的情况。

    1、  首先从网上获取可使用的代理服务器地址,获取代理地址的网站(IP和端口):

    http://cn-proxy.com/      #  别人给的,打不开页面

    http://http.zhiliandaili.cn/        #自己搜的,也没测试可用性

    2、  使用方法:

    proxy_list = [

    ‘http:// 115.219.113.65: 19303’,

    ‘http:// 61.188.26.120: 20893’,

    ‘http:// 115.219.123.12: 15789’,

    ]

    proxy_ip = random.choice(proxy_list)                # 之前需要import random

    proxies = {‘http’: proxy_ip}

    wb_data = requests.get(url, headers=headers,proxies=proxies)

    二、某字段需要多个同级元素的内容合成

    比如,area字段需要从li元素下的3个a元素的内容来合成,直接取li元素的get_text()会取到多余的内容,则可以使用下面的方法:

    area = list(map(Lambda x:x.text, soup.select(‘ul.det-infor>li:nth-of-type(3)>a’)))

    # select(‘ul.det-infor>li:nth-of-type(3)>a’) 取出3个a元素,map函数实现将3个a元素放进lambda函数中处理,即取得内容,最后用list将对象变成列表

    三、某字段需要某个元素下所有元素的内容合成

    如:div元素中所有子孙级元素的多段文字内容,共同构成所需字段,用stripped_strings处理,即:area = list(soup.select('div.nav')[0].stripped_strings)

    四、对抓取商品详细信息时中断的处理

    若抓取商品详细信息时中断,不知从何开始,可在商品信息表p_info中增加一个字段url;然后做如下处理,之后只爬取没有爬过的商品信息,即rest_of_urls:

    db_urls = [item['url'] for item in url_list.find()]     # 用列表解析式装入所有要爬取的链接

    index_urls = [item['url'] for item in p_info.find()]     #商品详情信息数据库中所有的现存的 url 字段

    x = set(db_urls)                      # 转换成集合的数据结构

    y = set(index_urls)

    rest_of_urls = x-y                        # 相减

    五、对解析过程中报错的容错

    1、  加if else的描述,如:

    title = soup.select('h1.title-name')[0].get_text() if soup.select('h1.title-name') else None

    2、  加try except, 如:

    try:

            item = item_info.find({'url': url})

    except Exception as ex:           # 将异常输出,帮助调试

            print(ex)

  • 相关阅读:
    浅谈Charles —— 青花瓷
    jdbc
    装饰者模式
    java可变参数
    简单日历
    DVD管理系统
    图片拷贝
    时间输出
    java基础小知识
    jQuery HTML
  • 原文地址:https://www.cnblogs.com/djlbolgs/p/12539861.html
Copyright © 2011-2022 走看看