Python爬虫lxml实训:使用lxml库爬取以下数据:游戏名称、游戏类型、游戏图片地址、文件大小、游戏热度

题目要求

  • 爬取数据的链接:https://down.gamersky.com/pc/
  •  爬取内容:游戏名称、游戏类型、游戏图片地址、文件大小、游戏热度
  • 将爬取内容写入文件

 解题思路

  • 导入所需要的第三方库
    from lxml import etree
    import requests

  •  将所需要爬取的网页下载到本地(避免重复请求网页拒绝访问)
    url="https://down.gamersky.com/pc/"
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                          "AppleWebKit/537.36 (KHTML, like Gecko) "
                           "Chrome/93.0.4577.82 Safari/537.36"}
    response=requests.get(url,headers=headers)
    html=response.text
    with open("游戏.html","w",encoding="utf-8") as file:
         file.write(html)

  • lxml库解析的步骤

    • 1.获取网页html内容的字符串

    • 2.生成可以解析的Element对象

                 
      html=etree.HTML(接收的str)
    • 3.使用xpath()方法进行节点或者特定节点的提取


 具体实现

1.解析

        如果出现

        lxml.etree.XMLSyntaxError: AttValue: " or ' expected, line 31, column 51

         不是你的错,是网页语法错误,需要自己编写一个解析器

        代码实现:

parser=etree.HTMLParser(encoding="utf-8") #自己编写解析器
html=etree.parse("游戏.html",parser=parser)

2.使用某歌插件xpathHelp(具体操作因为审核未通过没有放出来)

        使用ctrl+shift+x启动插件

 长按CTRL+SHIFT,鼠标指向需提取的段落,按X开启或关闭提取,提取到的段落会变为黄色。


3.爬取内容:游戏名称、游戏类型、游戏图片地址、文件大小、游戏热度

灵活使用xpathHelper插件

游戏名称

tilte=html.xpath("//li[@class='lx0']/div[@class='tit']/a/text()")

游戏类型

type=html.xpath("//li[@class='lx0']/div[@class='txt'][2]/text()")

游戏类型爬取的是 游戏类型:第一人称射击

这里采用一个循环将我们不需要的内容替换掉


typec=[] #存放爬取的关键内容
for i in type:
    typec.append(str(i).replace('游戏类型:',''))#游戏类型:被''替换

 游戏图片地址

address=html.xpath("//li[@class='lx0']/div[@class='img']/a/img/@src")

文件大小

size=html.xpath("//li[@class='lx0']/div[@class='txt'][4]/text()")
#类似于上面的游戏类型
sizec=[]
for i in size:
   sizec.append(str(i).replace('文件大小:',''))

游戏热度

popluar=html.xpath("//li[@class='lx0']/div[@class='txt'][5]/span[@class='hotdegree']/@tip")

4.将爬取和筛选过后的内容写入文件

with open('游戏.txt','w',encoding='utf-8') as file:
    file.write("游戏名称"+'\t'+"游戏类型"+'\t'+"游戏图片地址"+'\t'+"文件大小"+'\t'+"游戏热度"+'\n')
    for i in range(len(size)):
        file.write(tilte[i]+'\t'+typec[i]+'\t'+address[i]+'\t'+sizec[i]+'\t'+popluar[i]+'\n')

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥哥哥每天都要努力啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值