课时15第三节练习项目:爬取租房信息

成果

  • 2个函数分开测试的时候应该没问题
  • 实际抓取的时候,封禁太厉害了,无法抓取太多页面和过多测试
  • path_detail ='./resut_detail.txt' 用于存放抓取到所有的具体页面的具体细节结果
  • path_links ='./resut_links.txt' 用于存放抓取到所有的具体页面的地址
  • with open(path_detail,'a+') as text 不知道是否应该这样写,能保证不会把path_detail的文件给覆盖了,
    他在循环中的位置是否正确暂时未得到验证
  • with open(path_links,'a+') as text: 同上

代码

from bs4 import BeautifulSoup
import requests #有s
import time
path_detail ='./resut_detail.txt'
path_links ='./resut_links.txt'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',
    'Cookie':'abtest_ABTest4SearchDate=b; OZ_1U_2282=vid=v7f3c69fed80eb.0&ctime=1475593887&ltime=0; OZ_1Y_2282=erefer=-&eurl=http%3A//gz.xiaozhu.com/fangzi/2303611027.html&etime=1475593887&ctime=1475593887&ltime=0&compid=2282; _ga=GA1.2.1488476801.1475593889; gr_user_id=13bbe192-e386-4074-8ca0-a4a882ba66aa; gr_session_id_59a81cc7d8c04307ba183d331c373ef6=8d7a3db1-e35f-4f23-9ce3-e73afd78b45a; __utma=29082403.1488476801.1475593889.1475594056.1475594056.1; __utmb=29082403.1.10.1475594056; __utmc=29082403; __utmz=29082403.1475594056.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'
}
def get_detail(url_detail='http://gz.xiaozhu.com/fangzi/2303611027.html'):
    time.sleep(15)
    code = requests.get(url_detail)
    print(code)
    web_content = requests.get(url_detail)#注意是headers
    soup = BeautifulSoup(web_content.text,'lxml')
    titles = soup.select('div.pho_info h4 em')
    addresses = soup.select('body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > p')
    rentals = soup.select('div.day_l')
    images = soup.select('img#curBigImage')# id这样写?
    landlord_photos = soup.select('div.member_pic > a > img')
    landlord_genders = soup.select('#floatRightBox > div.js_box.clearfix > div.member_pic > div')
    landlord_names = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a')
    for title, address, rental, image, landlord_photo,landlord_gender, landlord_name in zip(titles, addresses, rentals, images, landlord_photos, landlord_genders, landlord_names):
        landlord_gender = str(landlord_gender.get('class'))#str多此一举了。。
        if landlord_gender == '[\'member_ico\']':
            landlord_gender = '男'
        elif landlord_gender == '[\'member_ico1\']':
            landlord_gender = '女'
        else:
            landlord_gender = '未知'
        date = {
            'title': title.get_text(),
            'address':address.get('title'),
            'rental':rental.get_text(),
            'image':image.get('src'),
            'landlord_photo':landlord_photo.get('src'),
            'landlord_gender':landlord_gender,
            'landlord_name':landlord_name.get_text()
        }
        list_value = list(date.values())
    with open(path_detail,'a+') as text:  #如果是按特定的列要怎么排序??,不断的新增结果用a+?
        text.write(str(list_value)+'\n')
        print(date)
#get_detail()
url_list = ['http://gz.xiaozhu.com/tianhe-duanzufang-p{}-8/'.format(i) for i in range(1,2)] #先拿2页
def get_moreurls():
    with open(path_links,'a+') as text:
        for link in url_list:
            time.sleep(2)
            web_content = requests.get(link)  # 注意是headers,如果要写
            soup = BeautifulSoup(web_content.text, 'lxml')
            link_lists = soup.select('#page_list ul.pic_list.clearfix li a.resule_img_a')
            for detail_link in link_lists:
                print(detail_link.get('href'))
                text.write(str(detail_link.get('href')+'\n'))  #采集到的链接记录下来
                get_detail(url_detail=str(detail_link.get('href')))#对具体的链接继续信息采集
get_moreurls()

总结与问题

1.目前感觉这个采集还是不如用火车头工具的方便,不过火车头很难采集动态加载的数据,而且也是自己学了皮毛,也许python更擅长抓去数量级别更大的数据和其他的自动处理??
比如说我目前是希望采集“今日头条”,“一点资讯”,"微博"某些媒体一周内所有的文章,微博的传播和阅读,互动量,因为这些页面的页面都有动态加载,或许比较适合python
2.目前我们的案例只是“打印”出来,没有记录在txt或者csv里,自己应该再多尝试是否可行,也搞不清楚这里用字典的意义,其实用list去存储更方便我们自己的后续操作(排序,筛选)。。(目前我也只是偷懒按字符串存储,没有在具体按什么顺序去存储操作)
3.目前这个作业还不是实际能用的,对于反爬的网站不太好用:

  • 如何能自动再尝试失败的抓取?或者继续循环抓取下一条,对抓取失败的链接进行记录(try,except,finally??)
  • 怎么反抓取?time.sleep会和后面的多线程抓取矛盾吗?小猪网这个实在太变态,稍微抓取就失败,404,感觉这个不适合作为抓取连续的例子,更适合后续的反爬取练习。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,322评论 5 465
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,288评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,227评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,015评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,936评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,534评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,995评论 3 389
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,616评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,907评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,923评论 2 315
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,741评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,525评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,016评论 3 301
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,141评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,453评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,054评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,249评论 2 339

推荐阅读更多精彩内容