必威体育Betway必威体育官网
当前位置:首页 > IT技术

爬虫如何对网页动态内容抓取

时间:2019-07-20 02:12:08来源:IT技术作者:seo实验室小编阅读:69次「手机版」
 

动态网页

我们进入淘宝网,在首页查看源代码

这里写图片描述

可以看到全是js,并没有直观的页面元素,因为首页的内容都是动态生成的,这时候我们就需要对网页的链接做一些分析了。

现在我想爬取淘宝网上所有关于Ipad的信息,那么现在首页的搜索框输入‘Ipad’

查看链接得到

https://s.taobao.com/search?q=ipad&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20180609&ie=utf8&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s=44

拿到这个链接后,对这一堆值我也是一脸茫然,不过第一个q应该是搜索的条目,然后我对后面的值逐个修改发现只有q和s是对对搜索内容有明显影响的,s代表当前的个数,比如s为1到44代表的是第一页,45到88是第二页。分析完成后后面的工作就好办了

第一步:设定需要取到哪些 内容

class GoodsItem(scrapy.Item):

    title = scrapy.field()
    price = scrapy.Field()
    shop = scrapy.Field()
    deal = scrapy.Field()

第二步:拿到初始的url

# 经过测试证明参数只需要传q和s的内容就可以进入相应的页面,所以这里只需要拿到q和s的值
def start_requests(self):
    base_url = 'https://s.taobao.com/search?'
    params = {}
    for keyword in ['ipad', 'iPhone', '小米手机']:
        params['q'] = keyword
        for page in range(10):
            params['s'] = page * 44
            full_url = base_url + urlencode(params)
            yield scrapy.Request(url=full_url, callback=self.parse,dont_filter=True)

第三步:解析页面

拿到存放商品内容的部分

这里写图片描述

def parse(self, response):
     goods_list = response.xpath('//*[@id="mainsrp-itemlist"]/p/p/p[1]')
     for goods in goods_list:
         item = GoodsItem()
         item['price'] = goods.xpath('p[5]/p[2]/p[1]/p[1]/strong/text()').extract_first()
         item['deal'] = goods.xpath('p[5]/p[2]/p[1]/p[2]/text()').extract_first()
         segments = goods.xpath('p[6]/p[2]/p[2]/a/text()').extract()
         title = StringIO() # 可变字符串,做拼接时是在同一个对象上进行修改,不会创建新的对象,但是拿到的值不是字符串,通过getvalue()拿到里面的字符串
         for segment in segments:
             title.write(re.sub('\s', '', segment))
         item['title'] = title.getvalue()
         yield item

第四步:编写中间件


class TaobaoDownloadMiddleware(object):
    def __init__(self, timeout=None):
        self.timeout = timeout
        # options = webdriver.ChromeOptions()
        # options.add_argument('--proxy-server=http://uid:pwd@xxxxxx:xx') # 为selenium设置代理 uid:用户名 pwd:密码
        self.browser = webdriver.Chrome(options )
        self.browser.set_window_size(1000, 600)
        self.browser.set_page_load_timeout(self.timeout)

    def __del__(self):
        self.browser.close()

    def process_request(self, request, spider):
        try:
            self.browser.get(request.url)
            return HtmlResponse(url=request.url, body=self.browser.page_source,
                                request=request, encoding='utf-8', status=200)
        except TimeoutException:
            return HtmlResponse(url=request.url, status=500, request=request)

    def process_response(self, request, response, spider):
        return response

    def process_exception(self, request, exception, spider):
        pass
    # 依赖注入--crawler--通过该对象可以对整个项目进行操作
    @classmethod
    def from_crawler(cls, crawler):
        return cls(timeout=10)

相关阅读

最详细的动态评分计算方法(附DSR计算公式解析)

大家知道,淘宝店铺动态评分不仅影响着一个店铺的搜索排名情况,而且还会直接影响消费者购买欲望,如果评分太差,那还有客户敢购买吗?所

程序员冒死揭露黑产系列之:通道劫持与动态注入

360“又”被小米下架了,孰是孰非这里暂且不表,不过在看到小米的声明中指控360“在用户并不知情的情况下静默执行Root刷机行为,篡改MI

微淘动态收藏怎么看不到?怎么上新推送微淘动态?

微淘是淘宝卖家和买家互动的一个平台,虽然目前从微淘进来的流量比较零散,但是,却是不可忽视的一个流量来源。看到自己喜欢的店铺,我们

【由浅入深】爬虫技术,值得收藏,来了解一下~

                                  爬虫技术,来了解一下~~ 一、为什么需要爬虫技术?  现在的互联网来说,包含

天猫几单有动态评分?怎么查看评分?

网购已经成为一种消费习惯了,从每年双十一大节的消费狂潮就可以看出来,在千万家店铺中消费者是怎么选出优秀店铺购买产品呢?在这个

分享到:

栏目导航

推荐阅读

热门阅读