Python-クロールクローラー

Python-クロールクローラー

私の日常業務では、データをクロールするための無限の要求があり、Pythonはそれを処理するのに役立ちます。

要件1:特定のAPPスコアをクロールする

関連モジュール:

1.リクエスト: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

要件2:APPのクロールレビュー

難易度:コメントデータは、JSを介して実現される動的コンテンツであることがよくあります。必要なデータはhtmlソースコードにありません。開発者ツールのネットワークモジュールを使用して、ソースをトレースし、コメント取得インターフェイスを分析します。たとえば、Huaweiのコメントデータは、次のインターフェイスを使用してAppStoreの公式Webサイトで分析および取得できます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.リクエスト:コメントの戻り値を取得するために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']

要件3:特定のWebサイトコンテンツページをクロールする

難易度:静的データがなく、データインターフェイスをソースまで追跡できない場合、それは大きなキラーに違いありません。ヘッドレスクロームは、非インターフェース形式のクロームです。セレンと組み合わせて使用​​すると、ブラウザーのさまざまなクリック操作をシミュレートし、動的計算後に取得したhtmlソースコードを取得できます。

関連モジュール:

1. Selenium:ヘッドレスクロームと組み合わせて使用​​すると、ブラウザのさまざまなクリック操作をシミュレートし、動的計算後に取得したhtmlソースコードを取得できます。

2. bs4:BeautifulSoup、htmlタグの解析に使用

3. re:正規表現を使用して必要なデータフィールドを切り取ります

コード:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import re
import os

"""
# 模拟点击的方式汇总
# 1. 标签名及id属性值组合定位
driver.find_element_by_css_selector("input#kw")
# 2.  标签名及class属性值组合定位
driver.find_element_by_css_selector("input.s_ipt")
# 3. 标签名及属性(含属性值)组合定位
driver.find_element_by_css_selector("input[name="wd"]")
# 4. 标签及属性名组合定位
driver.find_element_by_css_selector("input[name]")
# 5. 多个属性组合定位
driver.find_element_by_css_selector("[class="s_ipt"][name="wd"]")
"""

url = "https://zz.hnzwfw.gov.cn/zzzw/item/deptInfo.do?deptUnid=001003008002030&deptName=" + \
            "%E5%B8%82%E5%8D%AB%E7%94%9F%E5%81%A5%E5%BA%B7%E5%A7%94%E5%91%98%E4%BC%9A&areaCode=410100000000#sxqdL"

# 第一步、初始化
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options)
driver.set_window_size(1024, 7680)

# 第二步、打开网页
driver.get(url)

cnt = 11 # 共11页
bianhao = 1
while cnt > 0:
    # 第三步、解析内容
    soup = BeautifulSoup(driver.page_source,"html.parser")
    item_list = soup.find('ul', id='deptItemList')
    span_list = item_list.findAll('span')
    for i in span_list:
        print(str(bianhao) + ". " + i.string.split('.')[1])
        bianhao += 1
    cnt -= 1
    if cnt == 0:
        break
    # 第四步、翻页(模拟点击下一页)
    driver.find_element_by_css_selector('a.laypage_next').click()



参照文書

1. Pythonの-要求モジュールの詳細説明

2. Pythonの正規表現

3. Python + Selenium + Chromeヘッドレスモードに基づいて開始する

4. Python3は、selenium + webdriverを使用してchromeを開くことができず、エラーを報告しました:そのようなファイルまたはディレクトリはありません: 'chromedriver': 'chromedriver'

5.スーパーはPythonで美しいスープライブラリを使用してチュートリアルを詳細に説明しました

6. Selenium 4のいくつかのメソッドfind_element_by_css_selector()

おすすめ

転載: blog.csdn.net/ManWZD/article/details/108710978