正文
使用lxml库的xpath语法抓取
伯乐在线的python爬虫部分文章
,将数据存储到mongodb。本文主要练习xpath语法的使用和存储mongodb数据库的方式。
关于xpath的使用可以参考这篇文章
xpath全面总结
import requests # 导入网页请求库
from lxml import etree # 导入网页解析库
from pymongo import MongoClient
def start_requests(url):
r = requests.get(url)
return r.content
def parse(text):
html = etree.HTML(text)
divs = html.xpath('//div[@id="archive"]//div[@class="post-meta"]')
for div in divs:
# 一个中间变量
comment = div.xpath('./p/a[3]/text()')
# 使用生成器返回字典
yield {
'title': div.xpath('./p/a[1]/text()')[0],
'url': div.xpath('./p/a[1]/@href')[0],
'time': div.xpath('./p//text()')[2].strip('· \r\n'),
'type':div.xpath('./p/a[2]/text()')[0],
'typeurl':div.xpath('./p/a[2]/@href')[0],
'comment':comment[0] if comment else None,
'excerpt': div.xpath('./span[@class="excerpt"]/p/text()')[0]
}
def get_all(): # 抓取所有页面,返回包含所有信息的生成器
for i in range(1, 6): # 循环抓取所有页
url = 'http://python.jobbole.com/tag/%E7%88%AC%E8%99%AB/page/{}/'.format(i)
text = start_requests(url)
yield from parse(text)
def main():
client = MongoClient() # 连接数据库
db = client.bole # 创建名为bole的数据库
boledb = db.bole # 在bole数据库中创建表
for item in get_all():
boledb.insert_one(item) # 插入文档
client.close() # 断开连接
if __name__ == '__main__':
main()
存到数据库的结果如下