1.方式一
1.获取的json
import requests
使用requests,这个第三方的组建来实现。它既可以爬取json文件,也可以爬取网页信息。
适用场景:
-
一般用于请求有返回json文件或者json字符串的数据的爬取。
-
可以解析不同网页链接,但是是一类,且具有一定的规律可循的数据。
例如:xxx/123.html xxx/124.html类似于这些网页即可
data = requests.get(url=url, verify=False) if data.status_code == 404: print(url) return "no" str = data.text
这是爬取的json字符串,解析时候很简单。但是有时候会遇到里面包含有一些html的标签,我们可以利用正则表达式,先做一下处理才可以。然后将这个看似可json一样格式的字符串,先转化为dick(字典),然后再将字典转化为json字符串。但是在正真应用的时候一般只转化为字典即可,不需要转化为json,因为json就是字符串,不便于获取其中的key对应的value值。但是字典可以根据dick_name['key_name']来获取key对应的value值。
import re # re 为上面获取的结果 re_h = re.compile('</?w+[^>]*>') res = re_h.sub('', res)
# 转化为字典 dick_data = json.loads(res)
2.获取的是网页源文件
如果获取的是网页的源文件,就需要一个工具BeautifulSoup,来解析网络的源文件。
import requests from bs4 import BeautifulSoup import urllib3
# 忽略https的安全警告 urllib3.disable_warnings()
file = requests.get(url=url, verify=False) soup = BeautifulSoup(file.text, "html.parser")
soup是一个标签元素的集合或者是类。在这里可以通过soup获取标签的属性,或者标签的值,或者是标签点的属性值。 例如:
# 星座和日期 info1 = soup.select('h4')[0] print(info1.text)
2.方式二
使用selenium+webdriver的方式,这是一种无厘头的请求方式,可以本逼真的模仿使用对于浏览器的操作,而实现最大效率的爬取和防止反爬取的爬虫手段。
1.安装weddriver
下载对应的webdriver,放在一个目录下边,最好不要有空格和中文的目录下。
然后在环境变量种进行配置。
C:Program Files (x86)GoogleChromeApplication
将下载好的driver也放在chrome的安装目录下边一份。
2.然后导入对应的工具包。
# 导入selenium的驱动接口 from selenium import webdriver # 导入键盘操作的keys包 from selenium.webdriver.common.keys import Keys # 导入chrome选项 from selenium.webdriver.chrome.options import Options
配置driver的路径:
_CHROME_DRIVER_WIN = 'F:/software/chromedriver.exe'
3.创建driver
# 创建driver def create_driver(): chrome_options = Options() chrome_options.add_argument('–headless') driver = webdriver.Chrome(executable_path=config._CHROME_DRIVER_WIN, options=chrome_options) return driver
根据返回的driver即可获取震哥哥网页的原文档,然后使用bs4进行解析。 soup = BeautifulSoup(driver.page_source, 'html.parser')
4.使用keys
driver.find_element_by_id('next_buttons').click()
例如:以上的点击事件就是一个模仿手动切换网页的过程,可以在切换之后继续进行数据爬取。解决了没有显式返回json数据和点击切换网页时网页链接不变而无法爬取网页数据的问题。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试