一:前言
v2ex是一个汇集各类奇妙好玩的话题和流行动向的网站,有很多不错的问答。这次爬虫是五一期间做的,贴出来网址https://www.v2ex.com/?tab=all。
目标:爬取全部分类中的文章标题,分类,作者,文章地址这些内容然后以csv格式保存下来。
二:说明
- 本次使用的是Python3.6版本
- 作者这个内容是js动态数据 使用xpath Beautifulsoup的tag和select都抓取不到,我试了试用正则表达式可以,目前还没学其他方法就这样头铁了。
- 使用csv保存数据的时候我发现writer.writerow()和writer.writerows()是不一样的,本次用的前者。
三:实战分析
1.导入本次使用的模块,csv, re, requests, BeautifulSoup。
import csv, requests, re
from bs4 import BeautifulSoup
2.请求网页与解析网页。
url = 'https://www.v2ex.com/?tab=all'
html = requests.get(url).text
soup = BeautifulSoup(html, 'html.parser')
3.先看一下网页结构。
然后来获取文章标题,分类,作者,文章地址,这里的标题和分类都很容易获取,使用BeautifulSoup解析后按照class就可以找到,然后使用get_text()即可获取我们需要的内容,最头疼的是作者和文章链接,我这里使用正则才把他们挖掘出来,不过也算是练习正则表达式的使用。最后把获取的内容都传给articles列表。
articles = []
for article in soup.find_all(class_='cell item'):
title = article.find(class_='item_title').get_text()
category = article.find(class_='node').get_text()
author = re.findall(r'(?<=<a href="/member/).+(?="><img)', str(article))[0]
u = article.select('.item_title > a')
link = 'https://www.v2ex.com' + re.findall(r'(?<=href=").+(?=")', str(u))[0]
articles.append([title, category, author, link])
4.把列表中的数据保存在csv中,并且给他们第一行写入标题。
with open('v2ex.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(['文章标题', '分类', '作者', '文章地址'])
for row in articles:
writer.writerow(row)
四:总结
最后的效果:
这次爬取遇到了一些问题,慢慢的学会更多东西,爬虫让我非常快乐。我以后会坚持写下去,有喜欢的朋友一起学习交流吧!
这里贴出我的github地址,我的爬虫代码和学习的基础部分都放进去了。
https://github.com/rieuse/learnPython