目录
1.pycharm下载 社区版 (免费)
步骤搜索Download PyCharm: Python IDE for Professional Developers by JetBrains
往下滑
点击Download
建议D盘
nest
2.pycharm 浏览工具
打开后台控制器 F12按住 或者 右键点击检查 是在网页里进行
3.爬虫requests模块的使用
输入 pip install requests 下载好
简单的用下requests
import requests
#爬百度
url = "http://www.baidu.com"
#发送请求
resp=requests.get(url)
#设置字符集
resp.encoding = ('utf-8')
#print(resp.text)#拿到页面源代码
#把页面源代码写入到文件中
with open ("mybaidu.html",mode="w",encoding='utf-8')as f:
f.write(resp.text)
print("over!!")
测验:抓取肯德基餐厅信息
import requests
if __name__ == "__main__":
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
keyword = input('请输入想要的城市')
page = input('请输入页码')
data = {
'cname':'',
'pid':'',
'keyword':keyword,
'pageIndex':page,
'pageSize':10,
}
'''
第二步:请求发送
'''
resp = requests.post(url,data=data)
'''
第三步:获取响应数据
'''
page_text = resp.text
print(resp.json())
结果
正则表达式
正则:用来匹配字符串的一门表达式语言
1.正则支持普通字符
2.元字符,就一个字符来匹配一堆内容
\d(能匹配一个数字(0~9))
\w(能够匹配数字,字母,下划线(0-9,a-z,A-Z)
\D(除了数字以外都出
\W(除了数字字母下划线
[abc]匹配abc
[^abc]除了a,b,c
.除了换行符都可以
3.量词 控制,前面元字符出现的次数
+,前面的元字符出现一次或多次
*,
4.惰性匹配
.* 的作用
.*?
python 内置模块re
re.findall
re.search
re.finditer
re.compile
import re
result=re.findall(r"\d+","今天我有100块,买了2个蛋糕")
#re查找所有 r表示正则
print(result)
输出
import re
#result=re.findall(r"\d+","今天我有100块,买了2个蛋糕")
#re查找所有 r表示正则
result=re.search(r"\d+","今天我有100块,买了2个蛋糕")
print(result.group())
只输出100
re.finditer 数据多用这个 但是输出是item
import re
#result=re.findall(r"\d+","今天我有100块,买了2个蛋糕")
#re查找所有 r表示正则
#result=re.search(r"\d+","今天我有100块,买了2个蛋糕")
result=re.finditer(r"\d+","今天我有100块,买了2个蛋糕")#把所有结果放在迭代器
for item in result:
print(item.group())
预加载 obj re.compile 提前写正则,之后用的时候直接拿来用
例子
header={"user-agent
处理小小的反爬
练习:爬豆瓣
import requests
import re
url="https://movie.douban.com/top250?start="
head = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203"
}
resp = requests.get(url,headers=head)
resp.encoding='utf-8'
obj = re.compile(r'<div class="item">.*?<span class="title">(?P<name>.*?)</span>',re.S)
result = obj.finditer(resp.text)
for item in result:
dic=item.groupdict()
print(dic)
,re.S #用处是显示换行符
xpatha解析
XPath 是一门在 XML 文档中查找信息的语言,最初是用来搜寻 XML 文档的,但是它同样适用于 HTML 文档的搜索。
所以在Python爬虫中,我们经常使用xpath解析这种高效便捷的方式来提取信息。
对主页面进行分析
抓取主页面当中所有壁纸的链接地址
练习:爬桌面壁纸
第一步先爬它的超链接
import requests
import re
from lxml import etree
domain="https://desk.zol.com.cn"
url="https://desk.zol.com.cn/"
head = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203"
}
resp = requests.get(url,headers=head)
resp.encoding='gbk'
et = etree.HTML(resp.text)
result = et.xpath("//ul[@class='pic-list2 clearfix']/li/a/@href")
for item in result:
url= domain+item
print(url)
图片下载
json 把类似字典的字符串真的变成字典
import json
下载图片很慢 单线程.单任务
获取下载地址
多线程的概念
多线程:让程序能执行多个任务
from threading import Thread
线程池
线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象;
实战 zol桌面壁纸下载完整案例
一个页面如何进行数据爬行
(1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行