美文网首页网络爬虫天地
今日头条文章详情爬取

今日头条文章详情爬取

作者: 探索者_逗你玩儿 | 来源:发表于2018-10-05 16:25 被阅读0次

    我们随便找了一篇文章来进行实战操作地址如下
    https://www.toutiao.com/a6608208517834736142/
    用chrome看了一下源码,没有发现期望中的html结构,还是通过接口动态加载,不过在查看源码的时候发现来一些有趣的东西就是在script脚本里面发现来articleInfo这个东西,里面的数据就是文章详情页的数据,乍一看还看不出来,html标签都被转义了,所以要仔细的看看,既然这里能够发现我们想要的东西,那么接下来的就是抄家伙开撸,思路是通过urllib请求拿到真个的返回内容然后通过正则表达式进行提取,提取完以后在用html库进行进行转义就可以拿到内容了,是不是很666
    直接上代码。代码中有些是专有的业务逻辑剔除掉即可

        def get_article_detail(self, item):
            url = 'https://www.toutiao.com/i' + item.item_id
            is_exist = self.r.sismember(u'url', url)
            # 如何redis中已经存在爬过的url则自动跳过
            if not is_exist and item.article_genre == 'article':
                headers = {
                    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
                    'Connection': 'keep-alive',
                    'authority': 'www.toutiao.com',
                    'referer': 'https://www.toutiao.com/i' + item.item_id + '/',
                    'method': 'GET',
                    'path': 'a/' + item.item_id + '/',
                    'scheme': 'https'
                }
                self.s.headers.update(headers)
                req = self.s.get(url, proxies=get_proxy_ip())
                #随机休眠几秒
                time.sleep(random.random() * 2 + 3)
                resp_data = req.text
                data = resp_data.decode()
                content = re.findall(r"content:(.+)", data)[0]
                content = html.unescape(content)
                content = re.findall("'(.+)'", content)[0]
                item.content = content
                #更新文章内容
                toutiaodb.update(item)
                self.r.sadd(u'url', url)
            return item
    

    相关文章

      网友评论

        本文标题:今日头条文章详情爬取

        本文链接:https://www.haomeiwen.com/subject/tfyqaftx.html