

我们平时都说Python爬虫,其实这里可能有个误解,爬虫并不是Python独有的,可以做爬虫的语言有很多例如:PHP,JAVA,C#,C++,Python,选择Python做爬虫是因为Python相对来说比较简单,而且功能比较齐全。
- 常用的库
from bs4 import BeautifulSoup
import requests
from urllib import request
先把需要的包都装起来,后面就直接操作
- pip install requests
- pip install selenium
- pip install BeautifulSoup4
感受一下学习python的快乐
import requests
headers = {
'Host': 'image.baidu.com',
'Cookie': 'BDqhfp=%E9%BB%91%E4%B8%9D%26%26NaN-1undefined%26%263540%26%268; BIDUPSID=C24C7D8E598E67C686237DEAF51F7B28; PSTM=1656683846; BDUSS=FgtVzQyZHE4QnliUkVmTjdldE5VOEdtNHlVQldZb2xLWVVJZnFYOGRWcHRsZVppRVFBQUFBJCQAAAAAAAAAAAEAAAD36OLxx-C1xr3M0~0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0Iv2JtCL9id; BDUSS_BFESS=FgtVzQyZHE4QnliUkVmTjdldE5VOEdtNHlVQldZb2xLWVVJZnFYOGRWcHRsZVppRVFBQUFBJCQAAAAAAAAAAAEAAAD36OLxx-C1xr3M0~0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0Iv2JtCL9id; BAIDUID=90512AA3632B152E5F977142A71CD0B0:SL=0:NR=10:FG=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=90512AA3632B152E5F977142A71CD0B0:SL=0:NR=10:FG=1; BA_HECTOR=2k0k2k8l848k8ha5811hc5i8j15; ZFY=2fgqyju9wf05Hbo:AJBrnR:BLWCyBQUITGRJI5nCwvvEg:C; H_PS_PSSID=36545_36462_36721_36455_36668_34812_36691_36167_36693_36696_36073_36772_36746_36760_36771_36766_26350_36712; delPer=0; PSINO=6; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; userFrom=www.baidu.com; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; ab_sr=1.0.1_MzZhYWQzYThjYWRjNGQ5NDdhOGMxZGYwOTMzZGM5ZDYxYThlYjgyNjg0YjkwZjU1ZDcyZTJiNWFhNmE5YWE5MjMzMzA2Y2NlODg4MDFjZDkyZjljNDYzYTVmZjE5OGMyMDNiODdlMTE3MTliYjgyODg2OWUyMDhiNTczZWFhZjQ3ZWFjMDhmNGViODdkYjhmNjY1MjdlYWNhODlhOTEzMA==',
'Referer': 'https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&dyTabStr=MCwzLDIsMSw0LDUsOCw3LDYsOQ%3D%3D&word=%E9%BB%91%E4%B8%9D',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}
number = 1
for page in range(1, 11):
url = f'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=7395480229139350733&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E9%BB%91%E4%B8%9D&queryWord=%E9%BB%91%E4%B8%9D&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&expermode=&nojc=&isAsync=&pn={page * 30}&rn=30&gsm=d2&1657006313320='
response = requests.get(url=url, headers=headers)
json_data = response.json()
data_list = json_data['data']
for data in data_list[:-1]:
fromPageTitleEnc = data['fromPageTitleEnc']
middleURL = data['middleURL']
print(fromPageTitleEnc,middleURL)
img_data = requests.get(middleURL).content
with open(f'img/{number}.jpg', mode='wb') as f:
f.write(img_data)
number += 1
两者的主要区别就是:
- open need close()
- with open no need
with open(file="你要打开的路径名(或保存内容的地址)",mode="r/w/a",encoding="utf-8") as f:
data=f.read/write()
print(data)
r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+:打开一个文件用于读写。文件指针将会放在文件的开头。
rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w:打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb:以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+:打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
file.read([size]):将文件数据作为字符串返回,可选参数size控制读取的字节数
file.readlines([size]):返回文件中行内容的列表,size参数可选
file.write(str):将字符串写入文件
file.writelines(strings):将字符串序列写入文件
file.close():关闭文件
file.closed:表示文件已经被关闭,否则为False
file.mode:Access文件打开时使用的访问模式
file.encoding:文件所使用的编码
file.name:文件名
file.newlines:未读取到行分隔符时为None,只有一种行分隔符时为一个字符串,当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束的列表
file.softspace:为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用
1.案例
./ 表示在当前文件夹下,如果没有该文件就自动创建
with open('./sogou.html', 'w', encoding='UTF-8') as fp:
page_txt=fp.write()
print('爬取数据结束!!!')
2.问题
把运行结果写入文件中,只显示一行
mdoe select a , not w
3.问题
写入文件时乱码,在file=后面加r
with open(r'./sogou.html', 'w', encoding='UTF-8') as fp:
page_txt=fp.write()
print('爬取数据结束!!!')