Pycharm学习记录(一)——爬虫与反爬

爬虫是好久前学的,然后已经忘得差不多了。简单回顾一下。

1.确定目标网址

baseurl = 目标网址

2.爬取网页与解析网页(就是边爬边解)

#1.爬取网页
def getData(baseurl):
    datalist = []
    for i in range(0,1):
        url = baseurl + str(i*20)  #调用获取页面信息的函数,10次
        html = askURL(url)
        #2.主逐一解析网页
        soup = BeautifulSoup(html,"html.parser")
        for item in soup.find_all(div,class_="item"):
            print(item)

3.爬取时要适当伪装一下,即代码段中的askURL

def askURL(url):
    #代理池,这里的IP可换
    proxy_list = [
        202.106.169.142:80,
        220.181.35.109:8080,
    ]

    #绑定某个IP
    proxy = random.choice(proxy_list)
    urlhandle = urllib.request.ProxyHandler({http: proxy})
    opener = urllib.request.build_opener(urlhandle)
    urllib.request.install_opener(opener)

    #伪装头,在network中找
    headers = {
        user-agent: ,
        referer: ,
        cookie: ,
    }
    
    #用户代理,模拟头部信息,以及异常处理
    req = urllib.request.Request(url,headers = headers)
    html = ""
    try:
        response = urllib.request.urlopen(req)
        html = response.read().decode("utf-8")
        #print(html)
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    return html

4.解析完成后得到网页信息,找到想要的片段数据,比如想爬取‘链接’

findLink = re.compile(r<a href="(.*?)">)#这里需要结合网页来编写

link = re.findall(findLink,item)[0]
data.append(link)
datalist.append(data)

5.保存在excel表格当中

#3.保存
def saveData(datalist,savepath):
    book = xlwt.Workbook(encoding="utf-8",style_compression=0)  # 创建
    sheet = book.add_sheet(sheet1,cell_overwrite_ok=True)
    col = ("链接")

    #这里原本爬了好几类信息,所以用的循环,如果只有一个的话就不需要
    for i in range(0,1):
        sheet.write(0,i,col[i])
    for m in range(0,250):
        print("第%d条"%(m+1))
        data = datalist[m]
        for j in range(0,1):
            sheet.write(m+1,j,data[j])
    book.save(savepath)

关于Airbnb反爬。

目前采取的措施有:增加头部信息、代理IP池。

①增加头部信息。先检查网页,找到 文件,再复制其对应cURL格式,进入网址,直接转换为headers和parame格式。

②增加代理IP池。免费代理IP池网上挺多的,自己找找,然后也可以去买。

proxy_list = [
        159.255.163.177:80 #这只是一个例子,建议多找一些代理IP
    ]


#绑定某个IP
proxy = random.choice(proxy_list)
urlhandle = urllib.request.ProxyHandler({http: proxy})
opener = urllib.request.build_opener(urlhandle)
urllib.request.install_opener(opener)

③结果显示,不再出现403。不过后来可能又出现了不完整html的情况(某种反爬机制),还在研究当中。

经验分享 程序员 微信小程序 职场和发展