Pythonクローラーリクエストの基本的な使用法
免責事項:この記事の公開以降、この記事は参照用であり、複製またはコピーすることはできません。この記事を閲覧する当事者が国内法および規制の違反に関与している場合、すべての結果は、この記事を閲覧する当事者が負担し、この記事のブロガーとは関係ありません。また、この記事を閲覧する当事者の転載、コピー、その他の操作により、国内法および規制の違反によって引き起こされた紛争およびすべての結果は、この記事を閲覧する当事者が負担するものとし、この記事のブロガーとは関係ありません。
1.モジュールをロードします
PyCharm
https://blog.csdn.net/YKenan/article/details/96290603
コンソール
pip3 install requests
2.データをリクエストする
参照モジュール
import requests
構文
GETパラメーター:
- url:getリクエストのURL。
- params:リクエストの受信データを取得します。
- headers:ヘッダーを要求します。User -Agentをさらに設定します。
- timeout:接続タイムアウト時間を制限します。単位はsです。
POSTパラメータ:
- url:投稿リクエストのURL。
- data:ポストリクエストで渡されたデータ。
- headers:ヘッダーを要求します。User -Agentをさらに設定します。
- 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))