- 了解ajax加载
- 通过chrome的开发者工具,监控网络请求,并分析
- 用selenium完成爬虫
1.AJAX一般返回的是JSON,直接对AJAX地址进行post或get,就返回JSON数据了
2.ajax请求在前端中有两种表现形式,一种是在后台偷偷获取数据,另一种是在右侧进度条滑动到底部时进行数据的加载。
3.将地址栏中的链接复制过来作为爬取的网页对象,只会得到第一页的数据,因为二三页的数据并未加载出来,需要进入浏览器的开发者模式找到浏览器向服务器索要二三页数据的API接口。一般情况下,每一页的url都是有顺序的,我们可以使用循环来获取自己想要的信息。
代码如下:
import time
from selenium import webdriver
driver=webdriver.Chrome(executable_path="D:\chromedriver\chromedriver.exe")
driver.get("https://news.qq.com")
#了解ajax加载
for i in range(1,100):
time.sleep(2)
driver.execute_script("window.scrollTo(window.scrollX, %d);"%(i*200))
from bs4 import BeautifulSoup
html=driver.page_source
bsObj=BeautifulSoup(html,"lxml")
jxtits=bsObj.find_all("div",{"class":"jx-tit"})[0].find_next_sibling().find_all("li")
print("index",",","title",",","url")
for i,jxtit in enumerate(jxtits):
# print(jxtit)
try:
text=jxtit.find_all("img")[0]["alt"]
except:
text=jxtit.find_all("div",{"class":"lazyload-placeholder"})[0].text
try:
url=jxtit.find_all("a")[0]["href"]
except:
print(jxtit)
print(i+1,",",text,",",url)
爬取知乎较为困难,没有完成。
思路见:https://github.com/zkqiang/Zhihu-Login
README.md里有详细解析