過了個年,感覺有些代碼生疏了,所以先爬個簡書的推薦作者列表練個手。
這個網頁很簡單,而且連反爬措施都沒有,很適合新手進行練習。
爬取的過程主要就是不停的迭代加載更多,然后不停的爬取頁面讀取數據,就是這么簡單。
從上面這張圖可以看到,點擊“加載更多”后,請求網址為:
“http://www.lxweimin.com/recommendations/users?page=2”
可以進一步點擊,在“響應”里面確認是否返回了需要的作者信息。確認后,將這個網址鍵入瀏覽器,就可以看到上次加載更多后,出現的作者了。
類似的,只要改變網址后面的頁碼數量就可以爬取到所有的作者頁面了。
獲得頁碼信息的代碼如下,
def read_pages(url):
? ? text=requests.get(url,headers=header).content
? ? return text
爬取過程中發現其實不需要headers也是可以爬取的,但我在一開始加入headers時,反而出現了錯誤:
后來仔細檢查了headers里面的內容,發現復制的時候出現了點錯誤,里面復制的時候出現省略號,沒有寫全,以后注意啊!
“sensorsdata2015jssdkcross=%7B%…_mode=day; default_font=font2”
隨后讀取每一頁的信息就好了。這里我為了練手,用了xpath和BeautifulSoup兩種方式:
##def get_params(content):
##? ? selector=etree.HTML(content)
##? ? #name=link=i=1
##? ? try:
##? ? ? ? for i in range(1,25):
##? ? ? ? #while name and link:
##? ? ? ? ? ? name=selector.xpath('/html/body/div/div/div[%s]/div/a[1]/h4/text()'%i)[0].strip()
##? ? ? ? ? ? link=selector.xpath('/html/body/div/div/div[%s]/div/a[1]/@href'%i)[0]
##? ? ? ? ? ? print(name,link)
##? ? except IndexError:
##? ? ? ? None
##? ? print(name,link)
def get_params(content):
? ? s=soup(content,'lxml')
? ? for each in s.find_all('div',attrs={'class':'col-xs-8'}):
? ? ? ? name=each.h4.text.strip()
? ? ? ? link=each.a['href']
? ? ? ? print(name,link)
最后,用print把數據都打印出來就好