Uso básico de solicitações do rastreador Python
Isenção de responsabilidade: desde a publicação deste artigo, ele é apenas para referência e não pode ser reproduzido ou copiado. Se a parte que consulta este artigo estiver envolvida em qualquer violação das leis e regulamentos nacionais, todas as consequências serão arcadas pela parte que consulta este artigo e não tem nada a ver com o blogueiro deste artigo. E devido à reimpressão, cópia e outras operações das partes que navegam neste artigo, quaisquer disputas causadas pela violação das leis e regulamentos nacionais e todas as consequências serão arcadas pelas partes que navegam neste artigo e não têm nada a ver com o blogueiro deste artigo.
1. Carregue o módulo
PyCharm
https://blog.csdn.net/YKenan/article/details/96290603
Console
pip3 install requests
2. Solicitar dados
Módulo de Referência
import requests
Parâmetros
GET de sintaxe :
- url : o URL da solicitação get.
- params : obtém os dados de entrada da solicitação.
- headers : Solicite cabeçalhos. Defina mais User-Agent .
- tempo limite : Limita o tempo limite da conexão, a unidade é s .
Parâmetros POST :
- url : o URL da solicitação de postagem.
- dados : os dados passados na pós-solicitação.
- headers : Solicite cabeçalhos. Defina mais User-Agent .
- tempo limite : Limita o tempo limite da conexão, a unidade é s .
# get 请求
requests.get(url, params, headers, timeout)
# post 请求
requests.post(url, data, headers, timeout)
Por exemplo, simule a tradução do 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)
Como descobrir onde está a conexão:
Na página do Baidu, clique com o botão direito检查元素
ou clique na rede para atualizar a página.F12
3. Obtenha resultados de dados
# 返回二进制响应内容
response.content
# 返回页面内容
response.text
# 返回 JSON 数据
response.json()
Rastreamento de dados de processo com maior
try
prevenção de problemas de rede causados por rastreamento interrompido.
Solicitações ere
módulo de rastreamento basicamente juntos por uma extração regular de dados de conteúdo desejado.
4. Exemplos
Tradutor 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()
Baixar fotos
#!/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 + " 下载完成")
Dados de rastreamento da Administração Nacional de Produtos Médicos
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))