爬取全国各省某网各项数据


爬取全国各省某网各项数据

前段时间,做过使用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)

文章作者: 读序
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 读序 !
  目录