Pyhton爬取数据的方法总结

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(']*>')
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)\Google\Chrome\Application

将下载好的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数据和点击切换网页时网页链接不变而无法爬取网页数据的问题。

你可能感兴趣的:(python)