设为首页收藏本站

红色代码编程论坛

 找回密码
 加入我们
搜索
查看: 55|回复: 0

爬虫技巧分享

[复制链接]
发表于 2020-5-22 17:21 | 显示全部楼层 |阅读模式
爬虫基本的流程
• 发送请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
• 获取响应内容:如果服务器能正常响应,会得到一个Response, Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。
• 解析内容:得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
• 保存数据:保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。
什么是Request和Response?

最基本的爬取
抓取大多数情况属于get请求,即直接从对方服务器上获取数据。
首先,Python中自带urllib及urllib2这两个模块,基本上能满足一般的页面抓取。另外,requests也是非常有用的包,与此类似的,还有httplib2等等。
import requests
url = http://current.ip.16yun.cn:802
response = requests.get(url)
content = requests.get(url).content
print("response headers:", response.headers)
print("content:", content)
此外,对于带有查询字段的url,get请求一般会将来请求的数据附在url之后,以?分割url和传输数据,多个参数用&连接。
import requests
data = {'wd':'nike', 'ie':'utf-8'}
url='https://www.baidu.com'
response = requests.get(url=url, params=data)
使用代理服务器
这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等。
#! -- encoding:utf-8 --
    import requests
    import random
    # 要访问的目标页面
    targetUrl = "http://httpbin.org/ip"
    # 要访问的目标HTTPS页面
    # targetUrl = "https://httpbin.org/ip"
    # 代理服务器(产品官网 www.16yun.cn)
    proxyHost = "t.16yun.cn"
    proxyPort = "31111"
    # 代理隧道验证信息
    proxyUser = "username"
    proxyPass = "password"
    proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
        "host" : proxyHost,
        "port" : proxyPort,
        "user" : proxyUser,
        "pass" : proxyPass,
    }
    # 设置 http和https访问都是用HTTP代理
    proxies = {
        "http"  : proxyMeta,
        "https" : proxyMeta,
    }
    #  设置IP切换头
    tunnel = random.randint(1,10000)
    headers = {"Proxy-Tunnel": str(tunnel)}
    resp = requests.get(targetUrl, proxies=proxies, headers=headers)
    print resp.status_code
    print resp.text
cookie的处理
import urllib2, cookielib cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar()) opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler) urllib2.install_opener(opener) content = urllib2.urlopen('http://XXXX').read()
是的没错,如果想同时用代理和cookie,那就加入proxy_support然后operner改为
opener = urllib2.build_opener(proxy_support, cookie_support, urllib2.HTTPHandler)
表单的处理
这种情况属于post请求,即先向服务器发送表单数据,服务器再将返回的cookie存入本地。
import requests
data = {'data1':'XXXXX', 'data2':'XXXXX'}
response = requests.post(url=url, data=data)
伪装成浏览器,或者反“反盗链”
有些网站会检查你是不是真的浏览器访问,还是机器自动访问的。这种情况,加上User-Agent,表明你是浏览器访问即可。有时还会检查是否带Referer信息还会检查你的Referer是否合法,一般再加上Referer。
User-Agent可以用亿牛云提供给的真实库,Referer的来源可以伪装成百度搜索来的。
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.1276.73 Safari/537.36', 'Referer':'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=nike'}
response = requests.get(url=url, headers=headers)
爬虫有很多小技巧,以上只是一部分

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入我们 用百度帐号登录

x

积分兑换实物排行

您需要登录后才可以回帖 登录 | 加入我们 用百度帐号登录

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|红色代码编程论坛 ( 鲁ICP备11027229号  

GMT+8, 2020-7-8 18:57 , Processed in 0.129883 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表