爬取动态网页时遇到的问题,用Python爬取美丽cosplay小姐姐的图片

图片 10

图片 1

       绸缪爬取印度洋网络的华为手提式有线电话机的评论和介绍,因为发掘商议已经自行打好标签了,並且对于手提式有线电电话机的二种天性展现也打了分,以至详细的评头论脚皆有,对于背后自身的干活有援助,所以就希图爬取那几个批评.但开掘那几个网址的历次点下黄金年代页都是同生机勃勃的U福特ExplorerL地址,也等于说源代码只展现第生机勃勃页的比手画脚内容,对于用requests来爬取网页内容,用那一个地点的话不可能爬取更加多内容。后来查了一下,那是用了Ajax动态加载手艺,特地用来动态加载网页内容,完毕网页的异步更新。

作者:叶耀荣
源自:

   
 关于Ajax的相比详细的解释推荐五个链接,相比较详细的论述了那是怎么回事,爬取Ajax动态加载和翻页时url不改变的网页+网址案例,爬取Ajax动态加载和翻页时url不改变的网页。自身说一下本人遇见的题材,以致怎么样既解决的措施,作者的难题比较容易正是翻页url地址不改变,不可能爬取下生龙活虎页批评的剧情。其实这是因为网址的网址隐敝住了url地址前边的参数部分,只呈现了地址的入眼部分,办法非常的粗略就是找到这么些网页url地址被埋伏的参数部分。上边讲一下自家的缓和步骤:

不领悟有未有小堂弟、小三嫂向往cosplay的,今日我就享受二个关于爬取cosplay图片,emmmm,先来几张图活跃一下气氛!

      作者爬去的网址是其豆蔻梢头小米6x(4GB
RAM)点评,当您点开网址点击下风度翩翩页,再看看对应的url地址都以平等的远非生成,再看看对应的源代码发现都以千篇黄金年代律的,只展现第黄金时代页的评头论脚内容,第2,3,4….剧情不能够找到。伊始找网址被埋伏的url参数部分。笔者用的浏览器时谷歌(Google卡塔尔(英语:State of Qatar)Chrome浏览器,按F12展开开拓者选项,展开找到最上边导航栏network,上边选用All,筛选网页文件类型,这里也可选XH奥德赛表示动态网页类型,采纳侧边的preview来展示网页的剧情用来规定我们要找的网页,

图片 2

图片 3

 

大家点击最左侧网页中的下大器晚成页就能够在旁边的对应文件中找到这一个网页的代码文件音信,通过preview能够望见那么些文件的预览。当大家找到要找的网页时,在点击headers找到大家所要的新闻。

图片 4

图片 5

 

 

图片 6

Query String
Parameters呈现了我们须要的网页地址的参数部分,也正是我们网页的着入眼部分是’

String Parameters.

 

图片 7

咳咳咳…..接下来我们就进来正题!

可以预知,Query String
Parameters.对应是个字典,也得以通过键值没有错情势改动字典pageNo的值,来达到访谈分化批评网站的指标。上边正是爬取网站内容的行事了,那正是自己找掩瞒网站的进度。

先是,步入半次元,点击COS,热点推荐

小结一下,大家便是在找动态网页的时候经过展开开采者选项(F12),找到要爬取网页文件的header,在Query
String
Parameters中找到相应的参数部分,最后将url主体部分和参数部分组成一齐就能够获得完整的url地址了。

图片 8

上面附一下爬取的代码:

 

 1 from bs4 import BeautifulSoup
 2 import requests
 3 import re
 4 import pandas as pd
 5 
 6 #太平洋网爬取小米6X的评论
 7 #动态网页爬取(ajax)
 8 
 9 
10 def getHtml(url,data): #只输入URL的主体部分,后面的参数用下面的字典附加上
11     try:
12         r=requests.get(url,params=data)
13         r.raise_for_status()
14         r.encoding=r.apparent_encoding
15         return r.text
16     except:
17         print('爬取失败')
18 
19 def getComment(html):#获得一页的评论
20     commentList=[]
21     soup=BeautifulSoup(html,'html.parser')
22     lines=soup.find_all('dl',attrs={'class':'cmt-content'})#获得一整页所有的评论总的标签内容
23     for line in lines:#对每个评论进行解析,line就是每个评论的总标签内容<di class=cmt_content...>  ...</dl>
24         goal=line.find('strong',attrs={'class':'goal'}).string#得到总评分
25         comm_totall=line.find('div', attrs={'class':'eval-star'}).p.string.strip()#总评价
26         catagory=line.find('ul',attrs={'class':'goal-detail'}).find_all('li')#获得几个属性的评价
27        # print(catagory)
28         a1=catagory[0].string
29         a2 = catagory[1].string
30         a3 = catagory[2].string
31         a4 = catagory[3].string
32         a5 = catagory[4].string
33         comm_detail=line.find('p',attrs={'class':"text"})#具体评价,但这部分内容存在标签与字混合的成分,要把标签替换掉
34         detail_new=re.sub(r'<.*?>','',str(comm_detail))#因为部分内容存在空格xa0,要去掉这部分空格的代码显示
35         detail=','.join(detail_new.split())#用逗号来将分割的字符串两节起来,join()函数用来连接字符串数组元素
36         commentList.append([goal,comm_totall,a1,a2,a3,a4,a5,detail])
37     return commentList
38     # print(commentList)
39 
40 def comment(url,num):#获得多个页面的评论
41     data={'productId': 1073867,
42     'filterBy': -1,
43     'itemCfgId': -1,
44     'order': 2,
45     'pageNo': 1,
46     'vId': 432764}
47     comment_all=[]
48     for i in range(1,num+1):
49         data['pageNo']=i
50         html=getHtml(url,data)
51         comment=getComment(html)
52         comment_all+=comment
53         print('页数',i)
54     #print(comment_all)
55     return comment_all
56 
57 if __name__=='__main__':
58     url='http://pdcmt.pconline.com.cn/front/2015/mtp-list.jsp?'
59     a=comment(url,17)
60     print(len(a))
61     name = ['总评分', '总评价','性价比','屏幕','流畅度','电池','相机','细评']
62     test = pd.DataFrame(columns=name, data=a)
63     test.to_csv('D:/mi6x.csv', index=False)  # 去掉默认的行索引index

点击F12,能够看看开荒者工具窗口

 

图片 9

 

 

咱俩以第一张COS照片的代码举行深入分析….额…第二张赏心悦目,依旧从第二张初始吧。

红框里面便是那张图片的html代码,然后大家以健康访谈方式点击图片步向网页,能够见到那张图片分辨率越来越高。

图片 10

 

大家与在此以前HTML代码的图片的ULacrosseL进行相比较

发表评论

电子邮件地址不会被公开。 必填项已用*标注