Python-爬爬爬虫

Python-爬爬爬虫

日常工作中,遇到的爬取数据的需求层出不穷,Python 帮我搞定它。

需求一、爬取某 APP 评分

相关模块:

​ 1、requests : 发送 http 请求,获取 html 页面源代码

​ 2、re : 通过正则表达式把需要的数据字段抠出来

代码:

url = 'http://app.flyme.cn/games/public/detail?package_name=xxxxx'
ret = requests.get(url)
tmp_str = re.findall(r'魅友评分:</span>\r\n.*star_bg" data-num="\d+"', ret.text)
rate = re.findall(r'\d+', tmp_str[0])
rate_value = int(rate[0])/10

需求二、爬取某 APP 评论

难点: 评论数据往往是通过 JS 实现的动态内容,需要的数据不在 html 源代码中,利用开发者工具中的 Network 模块,溯源分析评论获取接口。例如华为的评论数据,可以在 AppStore 官网中分析获得,接口为 https://appgallery.cloud.huawei.com/uowap/index?method=internal.user.commenList3&serviceType=13&reqPageNum=1&maxResults=5&appid=C101886617&locale=zh_CN&LOCALE_NAME=zh_CN&version=10.0.0

相关模块:

​ 1、requests : 发送 http 请求,获取评论返回值

​ 2、json : 解析 json 格式的返回数据

代码:

url = "https://appgallery.cloud.huawei.com/uowap/index?method=internal.user.commenList3&serviceType=13&reqPageNum=%d&maxResults=5&appid=C101886617&locale=zh_CN&LOCALE_NAME=zh_CN&version=10.0.0" % (i)
review_json = requests.get(url).text
review_text = json.loads(review_json)
review_entry = review_text['list']
for review in review_entry:
  version = review['versionName']
  title = review['title']
  comment = review['commentInfo']
  rate = float(review['rating'])
  review_id = review['id']
  opertime = review['operTime']

需求三、爬取某网站内容网页

难点: 没有静态数据,也无法溯源得到数据接口,那就必须上大杀器了。headless chrome 即 chrome 的无界面形态,和 selenium 配合使用,可以模拟浏览器的各种点击操作,获取动态计算后得到的 html 源代码

相关模块:

​ 1、 selenium : 和 headless chrome 配合使用,可以模拟浏览器的各种点击操作,获取动态计算后得到的 html 源代码

​ 2、 bs4 : 即 BeautifulSoup,用于解析 html 标签

​ 3、re : 通过正则表达式把需要的数据字段抠出来

代码:

chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options)
driver.set_window_size(1024, 7680)
bianhao_list = []
url = 'http://www.gdzwfw.gov.cn/portal/personal/theme?region=440100&catalogCode=001001079'
driver.get(t_url+personal_code)
time.sleep(0.5)
# 模拟点击:仅显示本级
driver.find_element_by_css_selector('div#level-checkbox').click()
# 模拟点击:可在线申办
driver.find_element_by_css_selector('div#onlineservice-checkbox').click()
time.sleep(0.5)
while True:
    item_list = soup.find('table', id='item-list')
    a_list = item_list.findAll('a')
    for i in a_list:
        href_str = i.attrs['href']
        c = re.findall(r'[0-9][0-9A-Z]{20,50}[0-9]', href_str)
        if len(c) == 1:
            print(c[0])
            bianhao_list.append(c[0])
    try:
        # 模拟点击:下一页
        driver.find_element_by_css_selector('li#bPageNextPage').click()
        time.sleep(0.5)
        soup = BeautifulSoup(driver.page_source,"html.parser")
    except Exception as e:
        break

参考文档

1、 Python—requests模块详解

2、 Python 正则表达式

3、 基于Python+Selenium+Chrome headless 模式入门

4、 python3 使用selenium +webdriver打开chrome失败,报错:No such file or directory: ‘chromedriver’: ‘chromedriver’

5、 Python中使用Beautiful Soup库的超详细教程

6、 Selenium四 find_element_by_css_selector()的几种方法

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页