3
.这是访问post 需要模拟用户登录信息,------data(内设函数信息)=data‘ data’= (urllib.parse.urlencode({"hello":"world"}),encoding="utf-8")
import urllib.parse
data=bytes(urllib.parse.urlencode({"hello":"world"}),encoding="utf-8")
response =urllib.request.urlopen("https://httpbin.org/post",data=data) #这是访问的办法
print(response.read().decode("utf-8"))
进行超时处理,太慢先不爬取,也有可能是坏链接,先处理别的
try:
response =urllib.request.urlopen("https://httpbin.org/get",timeout=0.01)
print(response.read().decode("utf-8"))
except Exception as e:
print("超时")
初步伪装:将爬虫模拟成电脑浏览器访问
url="https://movie.douban.com/top250"
headers={
"User-Agent":" Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75"
}
data= bytes(urllib.parse.urlencode({'name':'eric'}),encoding="utf-8")
req= urllib.request.Request(url=url,data=data,headers=headers,method="POST")#这里其实只需要url和headers
respense=urllib.request.urlopen(req)
print(respense.read().decode("utf-8"))
***beatifulsoup 的四种类型
第一种Tag:标签类型
前后包含标签
file=open("./baidu.html"'"rb")
html=file.read()
bs=Beautifulsoup(html,"html.parser")
print(bs.head)
print(bs.a)
print(bs.title)
第二种 标签里的内容(字符串)
前后没有标签内容,直接打印字符串
#上面部分与上面一样
print(bs.title.string)这块不一样
第三种 整个一个文档
print(bs)
第四种 不包含符号的字符串
printr(bs.a.title)
文档搜索
1、字符串过滤:会查找与字符串完全匹配的内容
找出中间的
t_list=bs.find_all("a")
2、正则表达式搜索:内部含有a的都算
t_list=bs.find_all(re.compile("a"))
3、传入方法
def name_is_exists(tag):
return tag.has_attr("name")
t_list=bs.find_all(name_is_exists)
#4参数
参数查找,查找href
t_list = bs.find_all(href="http://news.baidu.com")
for item in t_list:
print(item)
文本查找查找text里面是数字的
t_list =bs.find_all(text=re.compile("\d"))
for item in t_list:
print(item)
limit参数
t_list = bs. find_all("a",limit=3)
得到这样信息时限定可以得到多少个这样的数据
#5、css选择器
t_list = bs.select(".mnav") 通过标题
#t_list = bs.select("title") 通过标签
#t_list = bs.select("#u1") 通过id查找
#t_list = bs.select("a[class='bri']") 通过属性查找
#t_list = bs.select("head->title") 通过子标签查找,一层一层下去
for item in t_list:
print(item)