爬虫01

2017-07-16  本文已影响0人  六六的建斌

前面正则表达式毕竟学的不咋地。所以原理知道。但不晓得怎么去匹配信息,

import urllib.request   re      导入相关的模块

data=urllib.request.urlopen(“url”).read().decode(utf-8)  打开url界面,并读取

req=.*?       正则表达式匹配要得到的信息

res=re.compile(req).findall(data)     在url中选取要匹配的信息

for line in range(0,len(res)):

        print(line[i])        可以看到所爬的所有信息

写入文件中去:

with open(,w) as f:       添加文件路径,windows里面要用\\转义

       for line in range(0,len(res)):       遍历

                 f.write(res[i]+"\n")              将每一Line写入\n的意思是写一个 换一行。

有关urllib的基础知识:

    import urllib.request

urllib.request.urlretrieve(网址,本地文件存贮地址)        这个函数可以直接从网上下东西到本地

urllib.request.urlcleanup()      可用于直接清除缓存,减少内存压力

还有info()  表示相关信息

对中文的转码:

keyword="彭坤"

keyword=urllib.request.quote(keyword)

超时设置:

网站服务器反应问题造成的网页显示时间长短,根据需要设定超时时间

urllib.request.urlopen("url",timeout=5)     这样来设置

自动模拟http请求

post()  表单,要登录的那种  and get()

get    一般网址为  url+http.?字段=值&字段=值&等

post格式:表单操作

import urllib.request

import urllib.parse

posturl=url

posttt=urllib.parse.urlencode({"name":"nideminzi","password":"nidemima"}).decode("utf-8") 对url进行解析,

      进行post,需要用到urllib.request.Requset(地址,解析过的数据)

req=urllib.request.Request(posturl,posttt)

res=urllib.request.urlopen(req).read().decode("utf-8")

爬虫异常处理:

如果没有异常处理,遇到异常时会崩溃,下次运行时会重新开始运行

URLError 原因 :连不上服务器,远程url不存在,无网络,   触发HTTPError错误

HTTPError 


爬虫的浏览器伪装技术 :fn+f12进入开发者工具栏

请求头的格式:("User-Agent",具体的值)元组形式

headers=("User-Agent","  ")

opener=urllib.request.build_opener()

opener.addheaders=[headers]

data=opener.open(url).read().decode("utf-8")

用户代理池的用法


ip代理与ip代理池的构建:用代理ip爬网站     百度搜搜西刺代理


初始化ip,和初始化用户代理差不多一样的步骤,

from bs4 import BeautifulSoup

import os

import urllib.request

if not os.path.exists('photofirst'):

os.makedirs('phtofirst')

url="https://pixabay.com/zh/photos/?q=%E9%A3%8E%E6%99%AF&image_type=&min_width=&min_height=&cat=&pagi="

for i in range(1,200):

res=urllib.request.urlopen(url+str(i))

data=BeautifulSoup(res,'lxml')

datas=data.find_all('img')

link=[]

for i in datas:

s=i.get('srcset')

if s is None:

continue

else:

link.append(s.split(' ')[0])

i=0

for links in link:

i+=1

filename='photofirst//'+'photofist'+str(i)+'.gpj'

with open(filename,'w'):

urllib.request.urlretrieve(links,filename)

上一篇 下一篇

猜你喜欢

热点阅读