爬取全国各省某网各项数据
前段时间,做过使用request爬取某网各项数据,主要以下体会,优先级:接口>请求>selenium
对于接口,使用浏览器自带的f12下网络的Fetch/XHR,查看有哪些带数据的接口,尝试模拟pc端的请求头,包含了当前的Cookie值,去获取数据
浏览器尽量使用火狐,不然有些接口或请求会被浏览器本身限制
对于请求的响应体,如果是json格式的,使用json()转化为json,使用[]提取相应内容
json_content=response.json(strict=False)
# print(json_content['pager']['dataCount'])
for row in json_content['datas']:
print(row)
如果是html文本类型的,使用beautifulsoup转化为html树,在找出符合预期的那一类数据
soup = BeautifulSoup(response.text, 'lxml')
# print(soup.prettify())
urls=[]
for child in soup.find_all(name='a'):
url=child.attrs['href']
if url not in urls:
urls.append(url)
print(url)
driver.get('http:'+url)
如果没有接口和请求,只能使用selenium强制模拟用户点击操作,需要关注的是,跳框架
driver.switch_to.frame(2) #第一个iframe为0
driver.switch_to.default_content() #跳回根html
以及有些按钮点击不生效,采用js方式进行点击
element_=driver.find_element(By.XPATH,f'/html/body/div[5]/div[2]/div[2]/div[2]/div[2]/div/div/table[2]/tbody/tr[{i}]/td[5]/input')
driver.execute_script("arguments[0].click();", element_)
对于有些元素不存在,但其他情况是存在的情况,可以使用try里写元素不存在,except后写其他存在的情况,支持多层嵌套。
数据存储时采用excel表来存的,中途数据追加使用二维列表,在放到pandas的DataFrame,最后使用with+ExcelWriter,追加到不同标签页上面
df = pd.DataFrame(results,
columns=['1','2','3'])
with pd.ExcelWriter('tax.xlsx', mode='a') as writer:
df.to_excel(writer, sheet_name=sheet_name,
index=False)