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:
- url : Die URL der get-Anfrage.
- params : ruft die eingehenden Daten der Anfrage ab.
- Header : Fordern Sie Header an. Legen Sie User-Agent mehr fest .
- Zeitüberschreitung : Begrenzen Sie die Verbindungszeitüberschreitung, das Gerät ist s .
POST- Parameter:
- url : Die URL der Post-Anfrage.
- Daten : Die in der Post-Anfrage übergebenen Daten.
- Header : Fordern Sie Header an. Legen Sie User-Agent mehr fest .
- 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
3. Datenergebnisse abrufen
# 返回二进制响应内容
response.content
# 返回页面内容
response.text
# 返回 JSON 数据
response.json()
Das Crawlen von Prozessdaten mit größeren Daten
try
verhindert, dass Netzwerkprobleme, die durch das Crawlen verursacht werden, gestoppt werden.
Anforderungen und im Grunde das Crawlen vonre
Modulen 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()
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 + " 下载完成")
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))