IT评测·应用市场-qidao123.com

标题: python爬虫分析器bs4,xpath,pquery [打印本页]

作者: 小秦哥    时间: 2025-3-23 17:18
标题: python爬虫分析器bs4,xpath,pquery
0x00 bs4

分析器的作用就是可以直接分析html页面,可以直接从网页中提取标签中的内容,而不消在利用正则表达式举行提起数据
  1. import requests
  2. from bs4 import BeautifulSoup
  3. html_content = '''
  4. <li id='123'><a href='dfsdf'>123</a>789</li>
  5. <li id='55'><a href='f'>456</a>888</li>
  6. '''
  7. # 解析HTML
  8. soup = BeautifulSoup(html_content, 'html.parser')  
  9. li=soup.find_all('li')  #查找所用的li标签
  10. print(li[0].text)       #把第一个li标签中内容读取出来
  11. a=li[0].find("a")       #在第一个li标签中查找a标签
  12. print(a.text)           
  13. print(a.get("href"))   #在读取a标签href的属性值
  14. li=soup.find('li',{"id":"123"})  #查找id为123的li标签
  15. for i in li:
  16.     print(i.text)
复制代码


案列爬取图片
https://haowallpaper.com/

  1. import requests
  2. from bs4 import BeautifulSoup
  3. url='https://haowallpaper.com/'
  4. html_content=requests.get(url).text
  5. html=BeautifulSoup(html_content,"html.parser")
  6. div=html.find_all("div",{"class":"card"})
  7. n=1
  8. for a_list in div:
  9.     src=a_list.find("img")
  10.     src=src.get("src")
  11.     rep=requests.get(src)
  12.     with open(f"{n}.jpg",'wb+') as f:
  13.         f.write(rep.content)   #要用content而不是text文本
  14.         n+=1
复制代码
0x01 xpath

案列爬取什么值得买手机价格和手机型号,当源码过多时可以把源码下载下来,删除无用代码然后在举行分析

  1. import requests
  2. from lxml import etree
  3. from PIL import Image, ImageDraw, ImageFont
  4. headers={"user-agent":
  5. "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"}
  6. url='https://www.smzdm.com/fenlei/zhinengshouji/'
  7. req=requests.get(url)
  8. html=etree.HTML(req.content)
  9. price_list=html.xpath('//a[@class="z-highlight "]/text()')
  10. title_list=html.xpath('//h5[@class="feed-block-title"]/a[1]/text()')
  11. # a_list=html.xpath("//div[@class='z-feed-img']//img/@src")
  12. count=0
  13. for i in price_list:
  14.    count+=1
  15. with open("3.txt","a+",encoding='gbk') as f:
  16.     for i in range(0,count):
  17.         f.write(price_list[i].strip())
  18.         f.write(title_list[i].strip()+'\n')
复制代码

0x02 PyQuery

1.PyQuery基础利用
  1. from pyquery import   PyQuery
  2. html='''
  3. <div class='aaa'><a href='www.123.com'>aaa</a>aaa1</div>
  4. <div class='bbb'><a href='www.456.com'>bbb</a>bbb1</div>
  5. <div class='ccc' id='cc'><a href='www.789.com'>ccc</a>ccc1</div>
  6. '''
  7. p=PyQuery(html)
  8. #a=p("div a")和a=p("div")("a")是一样的
  9. div1=p("div") #选取所有的div标签
  10. div=p("div .aaa") #选取div的class属性值为aaa的div标签
  11. div2=p("div #cc") #选取div的id值为cc的div标签
  12. print("-------")
  13. print(div)
  14. print("-------")
  15. print(div2)
  16. print("-------")
  17. a=p("div a").attr("href") #提取div标签下的a标签的href属性值,只会提取一个href值
  18. print(a)
  19. a1=p("div a").items()#一个包含所有a标签的迭代器,有很多内容时可以这样提取
  20. for a2 in a1:
  21.     href=a2.attr("href")
  22.     text=a2.text() #获取a标签中的文本
  23.     print(href)
  24.     print(text)
复制代码

修改html页面代码
  1. from pyquery import   PyQuery
  2. html='''
  3. <div class='aaa'><a href='www.123.com'>aaa</a>aaa1</div>
  4. <div class='bbb'><a href='www.456.com'>bbb</a>bbb1</div>
  5. <div class='ccc' id='cc'><a href='www.789.com'>ccc</a>ccc1</div>
  6. '''
  7. p=PyQuery(html)
  8. p("div .aaa").after("<div>qqq</div>") #在第一个div后加一个div标签
  9. p("div .aaa").append("<div>aaa</div>") #在第一个div里面加一个div标签
  10. p("div .aaa").attr("id","111")#在第一个div加一个属性id为111
  11. p("div .aaa").remove()#删除第一个div
  12. p("div .aaa").remove_attr("id")#删除第一个div的id
复制代码
2.案列豆瓣读书爬取短评,书评,评分,书名,内容,作者简介

留意这里热门短评是会刷新的,只读取5条,每次读取的都有不一样的地方

  1. import requests
  2. from pyquery import PyQuery
  3. headers={"user-agent":
  4. "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"}
  5. url='https://book.douban.com/subject/4913064/'
  6. rep=requests.get(url,headers=headers)
  7. p=PyQuery(rep.text)
  8. with open("1.txt",'a+',encoding='utf-8') as f:
  9.     title=p("title").text()
  10.     score=p("div #interest_sectl div div strong").text()
  11.     f.write(f"书名:{title}\n评分{score}\n")
  12.     content=p("div .intro").eq(0)("p").text() #选择第一个class为intro的div下所有的p标签
  13.     composer=p("div .intro").eq(1)("p").text()#选择第二个class为intro的div下所有的p标签
  14.     f.write(f"内容简介:{content}\n作者简介:{composer}")
  15.     comments=p("li p span ").items()
  16.     f.write("\n短评:\n")
  17.     for i in comments:
  18.         comment=i.text()
  19.         f.write(f"{comment}\n")
  20.     shupin_1=p("div.main-bd ").items()
  21.     f.write("书评:\n")
  22.     for j in shupin_1:
  23.         shupin_2=j("h2 a").text()
  24.         shupin_3=j("div div .short-content").text().replace("这篇书评可能有关键情节透露","").replace("...  (展开)","")
  25.         f.write(f"{shupin_2+shupin_3}\n")
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4