用selenium库爬取爱企查体育类企业相关信息

微信公众号:Garry的学习生涯

这段代码是用于爬取爱查网(https://www.aiqicha.com)上体育类企业的相关信息,包括企业名称、信用代码、成立时间和法人代表。下面是每一行代码的解释和注释:

import csv # 导入csv模块,用于处理CSV文件
import requests # 导入requests模块,用于发送HTTP请求
from time import sleep # 导入sleep函数,用于暂停程序执行
from bs4 import BeautifulSoup # 导入BeautifulSoup模块,用于解析HTML文档
from selenium import webdriver # 导入webdriver模块,用于自动化浏览器操作
from selenium.webdriver import Keys # 导入Keys类,用于模拟键盘按键操作
from selenium.webdriver.common.by import By # 导入By类,用于指定元素定位方式
from selenium.webdriver import ActionChains # 导入ActionChains类,用于模拟鼠标操作

接下来,代码打开一个名为"D:\爱企查.csv"的文件,以追加模式写入数据,并设置编码为utf-8-sig。然后创建一个csv.writer对象,用于将数据写入CSV文件。

fi = open("D:\\爱企查.csv", "a", newline="", encoding="utf-8-sig")
writer = csv.writer(fi)
writer.writerow(("企业名称", "信用代码", "成立时间", "法人代表"))

接下来,使用selenium的webdriver模块启动Chrome浏览器,并访问爱查网的网址。

driver = webdriver.Chrome()
driver.get('https://www.aiqicha.com')

在网页中查找输入框,并输入关键词"体育"。

el_1 = driver.find_element(By.ID, 'aqc-search-input')
el_1.send_keys('体育')

点击搜索按钮,等待页面加载完成。

driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div[1]/div[2]/button').click()
sleep(2)

获取当前页面的源代码,并使用BeautifulSoup解析HTML文档。

a = driver.page_source
soup = BeautifulSoup(a, "lxml")

找到包含验证码的元素,并提取其id属性值。

number = soup.find("div", class_="vcode-spin-button")['id']

根据验证码元素的id属性值,构造验证码拖动的目标元素的xpath表达式。

number_last_3 = number[-3:]

#此步破解百度图片滑动验证

                                 

当页面源代码长度大于0时,循环执行以下操作:

  1. 切换到新打开的窗口。

  2. 找到验证码源元素和目标元素。

  3. 使用ActionChains模拟鼠标拖动操作。

  4. 等待2秒。

  5. 重新获取页面源代码,并使用BeautifulSoup解析HTML文档。

  6. 更新页面源代码长度。

while len(a) > 0:
windows = driver.window_handles
driver.switch_to.window(windows[-1])
source = driver.find_element(By.XPATH, f'//*[@id="vcode-spin-button-p{number_last_3}"]')
target = driver.find_element(By.XPATH, f'//*[@id="vcode-spin-button-p{number_last_3}"]')
ActionChains(driver).drag_and_drop(source, target).perform()
sleep(2)
soup = BeautifulSoup(driver.page_source, "lxml")
a = soup.find_all("div", class_="vcode-spin-button")

切换回主窗口。

windows = driver.window_handles
driver.switch_to.window(windows[-1])

添加cookie,刷新页面。(写入登录后你的cookie的名字和value)

existing_cookie = {"name": " ", "value": " "}
driver.add_cookie(existing_cookie)
driver.refresh()

循环抓取第1页至第30页的数据。

for b in range(1, 31):
windows = driver.window_handles
driver.switch_to.window(windows[-1])
sleep(1)
for c in range(1, 11):
js = f'window.scrollTo(10000,0);'
driver.execute_script(js)
driver.find_element(By.XPATH, f"/html/body/div[1]/div[2]/div/div[1]/div[3]/div[2]/ul/div/div/input").click()
windows = driver.window_handles
driver.switch_to.window(windows[-1])
concent = driver.page_source
soup = BeautifulSoup(concent, "lxml")
try:
company_name = soup.find("h1", class_="name").get_text()
except:
company_name = "无相关内容"
try:
cridit_code = soup.find("span", class_="social-credit-code-text").get_text()
except:
cridit_code = "无相关内容"
try:
founding_time = soup.find_all("div", class_="info-item")[3].get_text().split()[1]
except:
founding_time = "无相关内容"
try:
legal_representative = soup.find("div", class_="info-item").get_text().split()[1]
except:
legal_representative = "无相关内容"
writer.writerow((company_name, cridit_code, founding_time, legal_representative))
driver.back()
l = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div[1]/div[3]/div[2]/ul/div/div/input')
l.send_keys(Keys.BACK_SPACE)
l.send_keys(Keys.BACK_SPACE)
l.send_keys(f'{b}', Keys.ENTER)
sleep(5)
print("抓取完成第{}页".format(b))
el_3 = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div/div[1]/div[3]/div[2]/ul/div/div/input')
el_3.send_keys(Keys.BACK_SPACE)
el_3.send_keys(Keys.BACK_SPACE)
el_3.send_keys(f'{b + 1}', Keys.ENTER)
js = f'window.scrollTo(10000,0);'
driver.execute_script(js)
sleep(3)
fi.close()
print("抓取完成!")
  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值