思路
通过爬虫爬取本网站的文章标题、简介和链接。爬取的时候注意下需要解析的标签对就行。
简单的思路就是:抓取单页 -> 解析信息 -> 保存文件 -> 单线程循环/多线程循环。
pyquery库:pyquery库是jQuery的Python实现,能够以jQuery的语法来操作解析 HTML 文档,易用性和解析速度都很好,和它差不多的还有BeautifulSoup,都是用来解析的。相比BeautifulSoup完美翔实的文档,虽然PyQuery库的文档弱爆了, 但是使用起来还是可以的,有些地方用起来很方便简洁。
代码如下
# 爬取笨猪网站的文章
import time
import json
import requests
from pyquery import PyQuery
from multiprocessing import Pool
from requests.exceptions import RequestException
def get_one_page(url):
# 获取一个页面
headers = {"User-Agent": "Mozilla/5.0"}
try:
response = requests.get(url, headers=headers)
if response.status_code != 200:
return None
except RequestException:
return None
return response.text
def pase_one_page(text):
# 解析页面内容
doc = PyQuery(text)
for info in doc(".kratos-hentry").items():
dct = {}
dct["标题"] = info.find("h2 a").text()
dct["简介"] = info.find(".kratos-entry-content-new p").text()
dct["链接"] = info.find("h2 a").attr("href")
yield dct
def write_to_file(content):
# 写入文件
# 写入文件的路径
with open("G:\\javaio\\data.txt", "a", encoding="utf-8") as f:
f.write(json.dumps(content, ensure_ascii=False)+"\n")
def main(offset):
# 程序入口
url = "https://www.benzhu.xyz/index.php/page/{offset}/"
text = get_one_page(url.format(offset=offset))
for item in pase_one_page(text):
write_to_file(item)
if __name__ == "__main__":
#start开始时间
start = time.time()
#单独获取
# main(1)
# 单线程循环抓取,翻页
# for i in range(1,6):
# main(i)
# 多进程抓取,翻页 获取1-5页的数据
pool = Pool()
pool.map(main, [i for i in range(1,6)])
#end结束时间
end = time.time()
#输出程序运行了多少时间
print(end-start)
效果图:
评论