思路:
- step 1:打開網(wǎng)頁
- step 2:用BeautifulSoup的select()方法得到所需要的元素(爬取信息)
- step 3:用for xxx in zip(xxx)打包不同元素(整理信息)
難點:
結(jié)果展示:
總結(jié):
- 對于本地html文件褥影,用open()打開,不用requests.get()打開
- 我發(fā)現(xiàn)對于一個元素的位置,不必將整條路徑給出卦绣,只需將能確定元素位置的路徑給出即可缝彬。同時生棍,對于復(fù)制元素selector的路徑寺鸥,出現(xiàn)的div:nth-child(2)丑掺,應(yīng)改為div:nth-of-type(2)获印。還有,如果需要一對多街州,改為div即可
- find_all()方法兼丰,詳見http://www.cnblogs.com/yupeng/p/3362031.html
-
得到了一個tag,要得到它里面的屬性唆缴,比如說"class"屬性鳍征,就可以有三種方法。
1.用tag["class"]得到
2.用tag.get('class')得到
3.用tag.attrs(['class'])得到
- 打印python字典面徽,內(nèi)容將是無序的艳丛,如果想要一個特定的順序,那么應(yīng)該在使用前自己對它們排序趟紊。
-
get_text()函數(shù)必須是soup類型才可以用氮双,其余的不行,用之前需要先看下是不是soup類型霎匈,不然會報錯
- if 語句判斷字符串相等:
== 用來判斷兩個對象的值是否相等
is 相等代表兩個對象的 id 相同(從底層來看的話戴差,可以看作引用同一塊內(nèi)存區(qū)域)
我的代碼:
from bs4 import BeautifulSoup
import requests
url = 'C:\\Users\\58472\\Desktop\\Python爬蟲\\Plan-for-combating-master\\week1\\1_2\\1_2answer_of_homework\\index.html'
#wb_data = requests.get(url)
#print(wb_data)
#對于本地文件,用open()打開唧躲,不用requests.get()打開
with open(url,'r') as wb_data:
soup = BeautifulSoup(wb_data,'lxml')
images = soup.select('div.col-md-9 > div:nth-of-type(2) > div > div > img')
prices = soup.select('div.col-md-9 > div:nth-of-type(2) > div > div > div.caption > h4.pull-right')
titles = soup.select('div.col-md-9 > div:nth-of-type(2) > div > div > div.caption > h4:nth-of-type(2) > a')
rates = soup.select('div.col-md-9 > div:nth-of-type(2) > div > div > div.ratings > p.pull-right')
stars_tags = soup.find_all("span",{"class":{"glyphicon glyphicon-star","glyphicon glyphicon-star-empty"}})
stars = []
for star in stars_tags:
stars.append(star['class'][1]) #這種方法能夠獲得tag的'class'中的值T焱臁!弄痹!
num_stars = []
for index in range(0,int(len(stars)/5)):
alist = stars[index*5:index*5+5]
num_stars.append('★'*alist.count('glyphicon-star')+'☆'*alist.count('glyphicon-star-empty')) #數(shù)組的count方法
for image, price, title, rate, num_star in zip(images,prices,titles,rates,num_stars):
data = {
'image': image.get('src'),
'price': price.get_text(),
'title': title.get_text(),
'rate':rate.get_text(),
'stars':num_star
}
print(data) #發(fā)現(xiàn)每次運行的結(jié)果饭入,順序都不同,覺得很奇怪8卣妗P扯! python字典打印是無序的蚓让,如果想要一個特定的順序乾忱,那么應(yīng)該在使用前自己對它們排序。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者