前言
这是一个很简单的爬虫小项目,主要目的在于抓取一些书籍信息,用到了xpath来定位,对于学习爬虫是很有用的~
接下来我给出代码和注释
代码和注释
import requests #请求模块,没有的需要匹配installrequests在终端下载
from lxml import etree #解析库,对得到的html网页信息解析时用
import csv #python内置模块,最后保存爬取到的数据时会用到
"""
标题 链接 作者 价格
"""
def get_html(url): #自定义一个函数对方法进行封装,这是请求并且得到网页html函数
try:
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62"
} #请求的头部信息,模拟浏览器进行请求,如果不加上会爬起失败
response = requests.get(url,headers=headers) #得到请求返回的数据
html = response.text #得到网页文本信息
return html
except Exception as error:
print("网页获取失败!")
print(error)
result_list = [] # 存取爬取的数据
def parse(html): #自定义一个解析函数,得到了网页数据就要对其进行解析
html = etree.HTML(html) #这里就用到了我们导入的模块进行解析
datas = html.xpath("//*[@id='block-102']/ul/li/div[2]")#解析完后就用到了xpath对你想得到的数据进行定位获取,没有定位到的数据就不用爬取下来了,减少了爬取到的数据的冗余
通过浏览器的检查找到网页源代码,鼠标在ul这个标签上的时候,首页书籍全部高亮所以这是书籍的总标签
for row in datas:
# 书名
name = row.xpath("h4/a/text()")[0]
#print(name) 打印一下就可以看到是否爬取下来了
# 链接详情
url_two = "https://www.ryjiaoyu.com/" + row.xpath("h4/a/@href")[0]
#print(url_two)
# 作者
auther = row.xpath("div/span/text()")[0].strip() # 清空名字两边的空格
#print(auther)
# 价格
price = row.xpath("span/span/text()")[0]
#print(price)
list = [name,url_two,auther,price] # 对应的标题、链接详情、作者、价格
#print(list)
result_list.append(list)
return result_list
#print(result_list)
# 保存
def save(item,path):
with open(path,"w",newline="") as f: # newline="" [关于newline=""的解释请借鉴一下这位大佬的博客](https://blog.csdn.net/Reborn214/article/details/123974467)
write = csv.writer(f)
write.writerows(item)
if __name__ == '__main__':
url = "https://www.ryjiaoyu.com/"
parse(get_html(url))
save(result_list,"./test.csv") # 以列表的形式保存
运行结果
感谢观看!有问题的欢迎各位大佬指正