需要的库:
selenium:自动化操作浏览器
beautifulsoup:提取数据
安装方式:pip
需要注意的是:selenium需要安装对应的浏览器的驱动:
Chrome
下载chrome的webdriver: http://chromedriver.storage.googleapis.com/index.html
Firefox
Firefox驱动下载地址为:https://github.com/mozilla/geckodriver/releases/
IE
IE浏览器驱动下载地址为:http://selenium-release.storage.googleapis.com/index.html
根据自己selenium版本下载对应版本的驱动即可
下载后:如果是windows赋值驱动到浏览器的安装目录即可
思路:通过selenium打开浏览器,在搜索框输入景区,然后就可以看到一个弹出的下拉框,每页有20个景区,一共有40多页,就需要提取每页的景区名称和地址,然后点击下一页再继续提取,最后保存到文件中:
开始:
打开jupyter:
第一步:导入需要的库:
from bs4 import BeautifulSoup from selenium import webdriver import time import pandas as pd
第二步:通过selenium打开浏览器,搜索
driver = webdriver.Firefox() driver.maximize_window() driver.get("https://www.amap.com/") elem = driver.find_element_by_xpath('//*[@id="searchipt"]') elem.send_keys("景区") elem = driver.find_element_by_xpath('/html/body/section[1]/header/div[2]/div/i') elem.click()
第三步:通过beautifulsoup获取网页源代码,并提取需要的内容,并通过selenium重复点击下一页,重复提取至字典中:
dict = {} dict2 = {} for i in range(47): print(i) soup = BeautifulSoup(driver.page_source) for na, ad in zip(soup.select(".poi-name"), soup.select(".poi-addr")): print(na.string) dict[''.join(na.string.split())] = ad.string elem = driver.find_element_by_xpath( "/html/body/div[1]/section/section/div[2]/span[1]/i") elem.click() time.sleep(10)
第四步:导入到pandas中,导出至文件或者剪贴板:
data=pd.DataFrame.from_dict(dict,orient='index') data.reset_index(inplace=True) data.columns=["名称","地址"] data.to_clipboard() data
结果:
關鍵字: 浏览器 bs4 elem.click