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')


版权声明:本文为qq_54737884原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。