爬虫练习网站 -http://quotes.toscrape.com的爬虫练习

本人是纯新手自学,所以代码的变量命名都不是很专业,有些变量的名字起的还不是很好理解,菜鸡本人。
本文思路:用requests请求页面,用xpath解析页面,用for循环对xpath返回的字典进行逐个的元素保存
出现的错误:在尝试获取网页右侧的链接页面时,返回一个空列表,后来检查发现是url的拼接出现了错误;在对xpath获取的页面尝试进行直接的存储,报错:提示write只能保存str类型的数据,于是想到用for循环的方法对列表中的元素进行逐个的保存

import  requests
from lxml import etree
request_header ={
    
    
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74'
}

url ='http://quotes.toscrape.com/page/1/'  #这是我们打开网站的第一个页面

file = open('./quotes.txt','a',encoding='utf-8') #此处没有使用with open的方法,因为它会自动关闭文件夹。'a'表示对addition,即追加,在原有文本的基础上继续写入

response =requests.get(url=url,headers=request_header).text

tree =etree.HTML(response)
web_main_data =tree.xpath('/html/body/div/div[2]/div[1]/div/span[1]/text()') # 页面解析

for each_data in web_main_data: #持久化存储首页的所有数据
    file.write(each_data)
    
web_right_data = tree.xpath('/html/body/div/div[2]/div[2]/span/a/@href') #获取所有的侧边栏的不完整链接
for link in web_right_data: #每次请求一个右侧名言的链接,每次保存一个返回后的页面
    base_url ='http://quotes.toscrape.com' + link  #因为每条名言的链接都不是完整链接,所以需要使用拼接的方法来获取整个完整的链接
    print(base_url)  # 用来检查所获得url的可靠性
    response_side =requests.get(url=base_url,headers=request_header).text #所有侧边栏链接请求页面
    tree2 = etree.HTML(response_side)
    response_side_artical = tree2.xpath('/html/body/div/div[2]/div[1]/div/span[1]/text()') #页面解析 获取了右侧名言链接背后的所有内容
    for artical in response_side_artical: # 对右侧名言链接的文章进行持久化存储
        file.write(artical+'\n'+'\n')

如果想要尝试运行本代码,需要安装lxml和requests模块,另外文件的保存路径需要自定义
见file = open('./quotes.txt','a',encoding='utf-8')一句中的文件路径。

猜你喜欢

转载自blog.csdn.net/weixin_47249161/article/details/113998179