过了个年,感觉有些代码生疏了,所以先爬个简书的推荐作者列表练个手。
这个网页很简单,而且连反爬措施都没有,很适合新手进行练习。
爬取的过程主要就是不停的迭代加载更多,然后不停的爬取页面读取数据,就是这么简单。
从上面这张图可以看到,点击“加载更多”后,请求网址为:
“https://www.jianshu.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把数据都打印出来就好