Pythonクローラーリクエストの基本的な使用法

免責事項:この記事の公開以降、この記事は参照用であり、複製またはコピーすることはできません。この記事を閲覧する当事者が国内法および規制の違反に関与している場合、すべての結果は、この記事を閲覧する当事者が負担し、この記事のブロガーとは関係ありません。また、この記事を閲覧する当事者の転載、コピー、その他の操作により、国内法および規制の違反によって引き起こされた紛争およびすべての結果は、この記事を閲覧する当事者が負担するものとし、この記事のブロガーとは関係ありません。

1.モジュールをロードします

PyCharm
https://blog.csdn.net/YKenan/article/details/96290603

コンソール

pip3 install requests

2.データをリクエストする

参照モジュール

import requests

構文
GETパラメーター:

  1. url:getリクエストのURL。
  2. params:リクエストの受信データを取得します。
  3. headersヘッダーを要求します。User -Agentをさらに設定します
  4. timeout:接続タイムアウト時間を制限します単位はsです。

POSTパラメータ:

  1. url:投稿リクエストのURL。
  2. data:ポストリクエストで渡されたデータ。
  3. headersヘッダーを要求します。User -Agentをさらに設定します
  4. timeout:接続タイムアウト時間を制限します単位はsです。
# get 请求
requests.get(url, params, headers, timeout)
# post 请求
requests.post(url, data, headers, timeout)

たとえば、Baiduの翻訳をシミュレートします

    # url, UA, 参数
    url = "https://fanyi.baidu.com/sug"
    headers = {
    
    
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0"
    }
    word = input("请输入单词:")
    # post 请求传入的数据
    data = {
    
    
        "kw": word
    }
    # 爬取
    response = requests.post(url=url, data=data, headers=headers, timeout=5)

:接続場所を見つけるためにどのように
Baiduのページに、右检查元素またはクリックをクリックネットワークはページを更新。F12

ここに写真の説明を挿入ここに写真の説明を挿入

ここに写真の説明を挿入

3.データ結果を取得します

# 返回二进制响应内容
response.content
# 返回页面内容
response.text
# 返回 JSON 数据
response.json()

より大きなクロールプロセスデータはtry、クロールの停止によって引き起こされるネットワークの問題を防ぎます。
リクエストと基本的にreモジュールを一緒にクロールすることで、必要なコンテンツデータを定期的に抽出します。

4.例

Baidu翻訳者

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# 导包
import requests
import json


if __name__ == '__main__':
    
    # url, UA, 参数
    url = "https://fanyi.baidu.com/sug"
    headers = {
    
    
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0"
    }
    word = input("请输入单词:")
    # post 请求传入的数据
    data = {
    
    
        "kw": word
    }
    # 爬取
    response = requests.post(url=url, data=data, headers=headers)
    # 返回 json 数据
    print(response.json()["data"][0]["v"])
    # 存储
    fp = open(f"./data/fanyi/{word}.json", "w", encoding="utf-8")
    # ensure_ascii=False 显示中文
    json.dump(response.json(), fp=fp, ensure_ascii=False)
    fp.close()

ここに写真の説明を挿入

写真をダウンロード

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import requests
import re

if __name__ == '__main__':

    # 遍历页数
    for page in range(21, 40):
        # url 及参数
        url = "http://aspx.sc.chinaz.com/query.aspx"
        params = {
    
    
            "keyword": "可爱",
            "classID": "11",
            "page": page
        }
        # UA
        headers = {
    
    
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0"
        }
        # 爬取
        response = requests.get(url=url, params=params, headers=headers)
        # 网页内容
        text = response.text
        # 正则 () 内匹配想要的内容
        image_urls = re.findall('<img data-src="(.*?)" alt=".*?" class="preview" />', text, re.S)
        print(image_urls)

        # 便利照片
        for image_url in image_urls:
            # 得到照片的二进制数据
            image_url__content = requests.get("http:" + image_url, headers=headers).content
            with open(f"./data/image/{'%d-%d' % (page, image_urls.index(image_url))}.jpg", "wb") as f:
                f.write(image_url__content)
                print(image_url + " 下载完成")

ここに写真の説明を挿入

National Medical ProductsAdministrationからのクロールデータ
http://scxk.nmpa.gov.cn:81/xk/

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# 导包
import requests
import pandas as pd


# 返回值可以作为输入值
def getID(list_page):
    # 记录爬虫没有爬取成功的页数
    list_error = []

    # 遍历页数
    for page in list_page:
        # url, UA, 参数
        url = "http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do"
        headers = {
    
    
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0"
        }
        # post 请求传入的数据
        data = {
    
    
            "method": "getXkzsList",
            "page": page,
        }
        try:
            # 爬取, 并设置超时时间为 3s
            response = requests.post(url=url, data=data, headers=headers, timeout=3)
            # 返回 json 数据, 得到 List
            json_list_ = response.json()["list"]
            # 得到 ID
            for json_list_data in json_list_:
                print(json_list_data["ID"])
                # 写入文件
                with open("./data/nmpa/list_ID.txt", "a", encoding="utf-8") as f:
                    f.write(json_list_data["ID"] + "\n")
        except:
            list_error.append(page)
    return list_error


# 返回值可以作为输入值
def get_detail(list_id):
    # 记录爬虫没有爬取成功的 ID
    list_error = []

    columns = ['businessLicenseNumber', 'businessPerson', 'certStr', 'cityCode', 'countyCode', 'creatUser', 'createTime', 'endTime', 'epsAddress', 'epsName', 'epsProductAddress', 'id', 'isimport', 'legalPerson', 'offDate', 'offReason', 'parentid', 'preid', 'processid', 'productSn', 'provinceCode', 'qfDate', 'qfManagerName', 'qualityPerson', 'rcManagerDepartName', 'rcManagerUser', 'startTime', 'xkCompleteDate', 'xkDate', 'xkDateStr', 'xkName', 'xkProject', 'xkRemark', 'xkType']
    df = pd.DataFrame(columns=columns)

    for ID in list_id:
        # url, UA, 参数
        url = "http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do"
        headers = {
    
    
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0"
        }
        # post 请求传入的数据
        data = {
    
    
            "method": "getXkzsById",
            "id": ID,
        }
        try:
            # 爬取, 并设置超时时间为 3s
            response = requests.post(url=url, data=data, headers=headers, timeout=1)
            # 返回 json 数据, 得到 List
            list_detail = list(dict(response.json()).values())
            print(list_detail)
            df.loc[len(df)] = pd.Series(list_detail, index=columns)
        except:
            list_error.append(ID)
    df.to_csv("./data/nmpa/list_detail_2.csv", encoding='utf_8_sig', index=False)
    return list_error


if __name__ == '__main__':

    # 获取 ID
    print(getID(range(1, 360)))
    # 读取文件
    f = open("./data/nmpa/list_ID.txt", "r", encoding="utf-8")
    lines = f.read().splitlines()
    f.close()
    # 爬取信息
    print(get_detail(lines))

ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/YKenan/article/details/111936873