鱼C论坛

 找回密码
 立即注册
查看: 1793|回复: 7

爬取麦田网租房信息总被封ip,求助大佬,愿意付费

[复制链接]
发表于 2019-8-4 18:55:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本来是用scrapy爬虫在爬一个网页的信息并放到mongodb数据库里,但总被封ip。所以想用requests模块来摸索一下到底是为什么会被发现
代码如下
import requests
import pymongo
import re
import time
import random
from lxml import etree


base_url = 'http://bj.maitian.cn/zfall/PG'
client = pymongo.MongoClient("mongodb://AAA:BBB@localhost:27017")
db = client['麦田']
collection = db['租房']

# 等会从这边开始变成循环

for i in range(1, 101):  # 可以选择需要的爬取的页数,目前只爬一页
    print('正在爬取第%d页' % i)
    two_many = []
    url = base_url + str(i)
    head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
    'Referer':url,
    'Upgrade-Insecure-Requests': '1'
    }
    response = requests.get(url, headers=head)
    data = response.text
    parse_data = etree.HTML(data)

    element_list = parse_data.xpath('//div[@class="list_title"]')
    for zufang_item in element_list:
        title = zufang_item.xpath('./h1/a/text()')[0].strip()
        price = zufang_item.xpath('./div[@class="the_price"]/ol/strong/span/text()')[0].strip()
        area = zufang_item.xpath('./p/span/text()')[0].replace('㎡', '').strip()
        content = zufang_item.xpath('./p[@class="house_hot"]/span/text()[2]')[0]
        pattern = r'昌平|朝阳|东城|大兴|丰台|海淀|石景山|顺义|通州|西城'
        district = re.findall(pattern, content)[0]
        item = {'标题': title, '价格': price, '面积': area, '区域': district}
        two_many.append(item)
    # 第一页的东西插入数据库
    collection.insert_many(two_many)
    t = random.uniform(3, 10)
    time.sleep(t)
client.close()
但是爬了8页就被封了ip,提示403.
实在是不知道该怎么办了,一页一页往下点击肯定不会被封,能请大神帮忙看下吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-4 19:18:55 | 显示全部楼层
粗略看了一下这个网站的请求方式。  
两个可能,
一个是可能后面需要cookie。  
另一种是你的refer写错了。
请求第一页不一定需要refer。
但其他页面,refer参数不能写自身
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-4 21:52:15 | 显示全部楼层
wongyusing 发表于 2019-8-4 19:18
粗略看了一下这个网站的请求方式。  
两个可能,
一个是可能后面需要cookie。  

大佬我在楼下回复,配图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-4 21:54:21 | 显示全部楼层
捕获.PNG
目前看下来应该是这个mv.html,请求头只有这些东西。选择第五页提示的也是PG5
能请大佬帮忙编个程,测试下实际效果吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-4 22:05:05 | 显示全部楼层
发现自己可能抓错包了
TIM图片20190804220430.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-5 11:45:23 | 显示全部楼层
wongyusing 发表于 2019-8-4 19:18
粗略看了一下这个网站的请求方式。  
两个可能,
一个是可能后面需要cookie。  

大佬求帮忙,单纯的refer还是被封。想要提取cookie,但不过是response还是session的response,里面的cookiejar都为空。但抓包是有cookie的,请问该怎么办呀。愿意付费,能帮忙看下如何提取cookie吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-5 14:17:20 | 显示全部楼层
思想不惧子弹 发表于 2019-8-5 11:45
大佬求帮忙,单纯的refer还是被封。想要提取cookie,但不过是response还是session的response,里面的cook ...

要是爬的页不是非常多的话,可以考虑用phantomjs无头浏览器,等于是模拟浏览器操作,不容易被封。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-7 00:16:02 | 显示全部楼层
思想不惧子弹 发表于 2019-8-5 11:45
大佬求帮忙,单纯的refer还是被封。想要提取cookie,但不过是response还是session的response,里面的cook ...

被封ip是正常的。  
refer写对了,正常来说可以连续爬取25到30页左右,才会触发网站封ip的机制。
根据网站的现有内容,理论上需要150个代理ip才能一次性爬取成功。  

如果不使用代理。爬取网站上的2099条数据,理论上需要 3小时46分钟左右(我的思路、我的代码)。

不过,你一开始的逻辑和网页结构分析都写错了。
爬取8页就被封ip也是情有可原。

网页显示有2099套房子。  
根据你写的代码。  
即使不封你ip,你也只能爬取到1000条数据。  

麻烦请先认真分析一下网站结构,然后再分析网页结构。  
制定爬取的策略,最后写代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-17 11:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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