Grundlegende Verwendung von Python-Crawler-Anforderungen

Grundlegende Verwendung von Python-Crawler-Anforderungen

Haftungsausschluss: Seit der Veröffentlichung dieses Artikels dient dieser Artikel nur als Referenz und darf nicht reproduziert oder kopiert werden. Wenn die Partei, die diesen Artikel durchsucht, an einem Verstoß gegen nationale Gesetze und Vorschriften beteiligt ist, trägt die Partei, die diesen Artikel durchsucht, alle Konsequenzen und hat nichts mit dem Blogger dieses Artikels zu tun. Und aufgrund des Nachdrucks, Kopierens und anderer Vorgänge der Partei, die diesen Artikel durchsucht, werden alle Streitigkeiten, die durch Verstöße gegen nationale Gesetze und Vorschriften und alle Konsequenzen verursacht werden, von der Partei getragen, die diesen Artikel durchsucht, und haben nichts mit dem Blogger dieses Artikels zu tun.

1. Laden Sie das Modul

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

Konsole

pip3 install requests

2. Daten anfordern

Referenzmodul

import requests

Syntax
GET- Parameter:

  1. url : Die URL der get-Anfrage.
  2. params : ruft die eingehenden Daten der Anfrage ab.
  3. Header : Fordern Sie Header an. Legen Sie User-Agent mehr fest .
  4. Zeitüberschreitung : Begrenzen Sie die Verbindungszeitüberschreitung, das Gerät ist s .

POST- Parameter:

  1. url : Die URL der Post-Anfrage.
  2. Daten : Die in der Post-Anfrage übergebenen Daten.
  3. Header : Fordern Sie Header an. Legen Sie User-Agent mehr fest .
  4. Zeitüberschreitung : Begrenzen Sie die Verbindungszeitüberschreitung, das Gerät ist s .
# get 请求
requests.get(url, params, headers, timeout)
# post 请求
requests.post(url, data, headers, timeout)

Simulieren Sie beispielsweise die Baidu-Übersetzung

    # 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)

So finden Sie heraus, wo die Verbindung besteht: Klicken Sie auf der
Baidu-Seite mit der rechten 检查元素Maustaste oder klicken Sie auf das Netzwerk, um die Seite zu aktualisieren.F12

Fügen Sie hier eine Bildbeschreibung einFügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

3. Datenergebnisse abrufen

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

Das Crawlen von Prozessdaten mit größeren Daten tryverhindert, dass Netzwerkprobleme, die durch das Crawlen verursacht werden, gestoppt werden.
Anforderungen und im Grunde das Crawlen von reModulen durch regelmäßiges Extrahieren gewünschter Inhaltsdaten.

4. Beispiele

Baidu Übersetzer

#!/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()

Fügen Sie hier eine Bildbeschreibung ein

Fotos herunterladen

#!/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 + " 下载完成")

Fügen Sie hier eine Bildbeschreibung ein

Crawlen von Daten aus der National Medical Products Administration
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))

Fügen Sie hier eine Bildbeschreibung ein

Ich denke du magst

Origin blog.csdn.net/YKenan/article/details/111936873
Empfohlen
Rangfolge