摘要
今天的任物是通过requests + bs4 & lxml 这三个库来完成爬取丁香园论坛的回复内容首先我们说一下数据 这里的数据包含了 标题 楼主提问的问题内容 以及各楼层的回复内容(title author_say recovery) 这三个内容 bs4 以及lxml 的文档较为玩整这里就不多做赘述,有需要可以去查看文档 bs4 lxml 笔者这里较为常用的爬虫库是bs4,lxml多数用来读取较大的lxml档案(可以参考这里) 接下来进入实作的部份
实作
不啰嗦先上代码
import requests
from bs4 import BeautifulSoup
from lxml import etree
class Taks2:
def __init__(self):
pass
def bs4(self):
data = {}
req = requests.get('http://www.dxy.cn/bbs/thread/626626#626626')
soup = BeautifulSoup(req.text, 'lxml')
title = soup.find('title')
data['title'] = title.text
author_say_tags = soup.find('meta', attrs={'property': "og:description"})
author_say_tag = author_say_tags.attrs
author_say = author_say_tag['content']
data['author_say'] = author_say
recoverys = soup.find_all('td', attrs={'class': "postbody"})
for recovery in recoverys:
data['recovery'] = recovery.text.strip()
print(data)
def lxml(self):
data = {}
req = requests.get('http://www.dxy.cn/bbs/thread/626626#626626')
xml_tree = etree.HTML(req.text)
title = xml_tree.xpath('//*[@id="postview"]/table/tbody/tr/th/h1')
author_say = xml_tree.xpath('//*[@id="post_1"]/table/tbody/tr/td[2]/div[2]/div[2]/table/tbody/tr/td')
data['title'] = title[0].text.strip()
data['author_say'] = author_say[0].text.strip()
user = xml_tree.xpath('//div[@class="auth"]/a/text()')
recoverys = xml_tree.xpath('//td[@class="postbody"]')
for i in range(0, len(user)):
data['recovery'] = user[i].strip() + ":" + recoverys[i].xpath('string(.)').strip()
print(data)
a = Taks2().lxml()
print('*'*50+'lxm;'+'*'*50)
s= Taks2().bs4()
运行结果
上面是通过lxml +xpath解析的结果 下面是使用bs4 解析的结果 可以看到其实都是一样的 xpath 得详细资料可以参考这里
以上就是今天要介绍的爬虫实战部份