翼度科技»论坛 编程开发 python 查看内容

python爬虫

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
What's 爬虫?

简单来说:

爬虫,即网络蜘蛛,是伪装成客户端与服务器进行数据交互的程序。
代码

点击查看代码
  1. from bs4 import BeautifulSoup        #网页解析
  2. import urllib.request,urllib.error   #制定URL,获取网页数据
  3. import re                            #正则表达式  进行文字匹配
  4. import xlwt                          #进行excel操作
  5. from tqdm import trange              #进度条库
  6. def main():
  7.     baseurl = "https://movie.douban.com/top250?start="
  8.     # 1.爬取网页
  9.     # 2.逐一解析数据
  10.     datalist =getDate(baseurl)
  11.     # 3.保存数据
  12.     savepath = "豆瓣top250.xls"
  13.     savedata(datalist,savepath)
  14. #影片详情链接
  15. findLink = re.compile(r'<a target="_blank" href="https://www.cnblogs.com/(.*?)">')     #创建正则表达式,表示规则(字符串的模式)
  16. #影片图片的链接
  17. findImagesrc = re.compile( r'<img[^>]+src=["\']([^"\']+)["\']')     #ai写的正则
  18. #影片中文片名
  19. findName = re.compile(r'(.*)')
  20. #影片评分
  21. findRating = re.compile(r'(.*)')
  22. #影片热评
  23. findComment = re.compile(r'(.*?)')
  24. def getDate(baseurl):
  25.     datalist = []
  26.     # 1.爬取网页
  27.     for i in trange(0,10):
  28.         url = baseurl + str(i*25)
  29.         html = askURL(url)      #保存获取到的网络源码
  30.         soup = BeautifulSoup(html,"html.parser")
  31.         for item in soup.find_all('div',class_="item"):
  32.             # 2.逐一解析数据
  33.             item =str(item)
  34.             data=[]
  35.             name = re.findall(findName,item)[0]
  36.             data.append(name)
  37.             link = re.findall(findLink,item)[0]
  38.             data.append(link)
  39.             img = re.findall(findImagesrc,item)[0]
  40.             data.append(img)
  41.             rating = re.findall(findRating,item)
  42.             data.append(rating)
  43.             comment = re.findall(findComment,item)
  44.             if len(comment)!=0:
  45.                 comment=comment[0].replace("。","")
  46.                 data.append(comment)
  47.             else:
  48.                 data.append("  ")
  49.             datalist.append(data)
  50.     return datalist
  51. def askURL(url):
  52.     head={
  53.         "User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36 Edg/121.0.0.0"
  54.     }
  55.     request = urllib.request.Request(url,headers=head)
  56.     html= ""
  57.     try:
  58.         response=urllib.request.urlopen(request)
  59.         html=response.read().decode("utf-8")
  60.     except urllib.error.URLError as e:
  61.         if hasattr(e,"code"):
  62.             print(e.code)
  63.         if hasattr(e,"reason"):
  64.             print(e.reason)
  65.     return html
  66. def savedata(datalist,savepath):
  67.     book = xlwt.Workbook(encoding="utf-8",style_compression=0)   #压缩样式效果,设为0
  68.     sheet = book.add_sheet('top250',cell_overwrite_ok=True)  #每个单元在写入时覆盖以前的内容
  69.     col = ('电影中文名','电影详情链接','图片链接','电影评分','电影热评')
  70.     for i in range(0,len(col)):
  71.         sheet.write(0,i,col[i])   #列名
  72.     for i in range (0,250):
  73.         data = datalist[i]
  74.         for j in range (0,len(col)):
  75.             sheet.write(i+1,j,data[j])
  76.     book.save(savepath)
  77. if __name__ == "__main__":
  78.     main()
  79.     print("爬取完成")
复制代码
需要用到的库:from bs4 import BeautifulSoup           #网页解析import urllib.request,urllib.error           #制定URL,获取网页数据import re                                             #正则表达式  进行文字匹配import xlwt                                          #进行excel操作from tqdm import trange                    进度条库,当然你也可以不用,这个库只需要把for循环里的range改为trange,你就可以得到一个进度条

思路

1.获取网页的源码
  1. def askURL(url):
  2.     head={
  3.         "User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36 Edg/121.0.0.0"
  4.     }
  5.     request = urllib.request.Request(url,headers=head)
  6.     html= ""
  7.     try:
  8.         response=urllib.request.urlopen(request)
  9.         html=response.read().decode("utf-8")
  10.         #print(html)
  11.     except urllib.error.URLError as e:
  12.         if hasattr(e,"code"):
  13.             print(e.code)
  14.         if hasattr(e,"reason"):
  15.             print(e.reason)
  16.     return html
复制代码
用个循环,根据网页制定一下url
找到用于伪装客户端User-Agent
在network里刷新一下网页,找到发送的标头header
这个是user-agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36 Edg/121.0.0.0
用urllib获取你制定的url的源码
在 try 块中:
调用 urllib.request.urlopen(request) 发送HTTP请求,并获取响应对象 response。
通过 response.read() 获取服务器返回的原始二进制数据。
使用 decode("utf-8") 方法将二进制数据解码成UTF-8编码的字符串,并将其赋值给变量 html。
如果在执行 urlopen 函数过程中出现 urllib.error.URLError 异常,则进入 except 块:
判断异常对象是否包含 .code 属性,如果有则打印出HTTP状态码。
再判断异常对象是否包含 .reason 属性,如果有则打印出错误原因。
最后,无论是否发生异常,都返回抓取到的网页HTML内容(即变量 html)
2.解析数据
  1. def getDate(baseurl):
  2.     datalist = []
  3.     # 1.爬取网页
  4.     for i in trange(0,10):
  5.         url = baseurl + str(i*25)
  6.         html = askURL(url)      #保存获取到的网络源码
  7.         soup = BeautifulSoup(html,"html.parser")
  8.         for item in soup.find_all('div',class_="item"):
  9.             # 2.逐一解析数据
  10.             item =str(item)
  11.             data=[]
  12.             name = re.findall(findName,item)[0]
  13.             data.append(name)
  14.             link = re.findall(findLink,item)[0]
  15.             data.append(link)
  16.             img = re.findall(findImagesrc,item)[0]
  17.             data.append(img)
  18.             rating = re.findall(findRating,item)
  19.             data.append(rating)
  20.             comment = re.findall(findComment,item)
  21.             if len(comment)!=0:
  22.                 comment=comment[0].replace("。","")
  23.                 data.append(comment)
  24.             else:
  25.                 data.append("  ")
  26.             datalist.append(data)
  27.     return datalist
复制代码
BeautifulSoup
bs4是一个强大的库,用于从HTML和XML文件中提取数据,它能够将复杂的HTML结构转换成树形结构(即元素树),使得开发者可以方便地搜索、遍历以及修改网页内容。
"html.parser": 这是BeautifulSoup用来解析HTML文档的解析器。在这个案例中,它是指Python自带的标准HTML解析器。除了标准的解析器外,BeautifulSoup还可以配合其他第三方解析器如 lxml 来使用。
用bs4和re筛选信息
3.保存数据 写入excel表中

需要用到xwlt库
  1. def savedata(datalist,savepath):
  2.     book = xlwt.Workbook(encoding="utf-8",style_compression=0)   #压缩样式效果,设为0
  3.     sheet = book.add_sheet('top250',cell_overwrite_ok=True)  #每个单元在写入时覆盖以前的内容
  4.     col = ('电影中文名','电影详情链接','图片链接','电影评分','电影热评')
  5.     for i in range(0,len(col)):
  6.         sheet.write(0,i,col[i])   #列名
  7.     for i in range (0,250):
  8.         data = datalist[i]
  9.         for j in range (0,len(col)):
  10.             sheet.write(i+1,j,data[j])
  11.     book.save(savepath)
复制代码
来源:https://www.cnblogs.com/Sol9/p/18246615
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具