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

今日头条文章详情爬取

作者: 探索者_逗你玩儿 | 来源:发表于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