python四周实战——第一周作业

总算做出来了第一周的作业,自己觉得勉强符合课件里的要求了吧,还没来得及看作业详解。还是觉得很方啊,像课程里的什么反爬虫什么的都没加上去

总结:

  1. 感觉这个作业跟第三课的练习非常地像,借鉴了很多。另外作业描述得不是很清楚,开始是爬取除了转转和方框里的推广,但是只有第一页有3条,后面的一条都没有,于是自作主张爬取转转,CSS selector都重新加过。
  2. 包装进zip的时候,开始由于有一个页面是没有“区域”显示的,于是这个页面就没有加进来,本来才3个页面就剩2个了。试了很久也没想到办法,只好看了下答案,发现没有zip,直接构造data了,而且还为每个元素设置了默认值。有默认值就好办多了
  3. 即使是默认值,发现自己还是只能抄抄了,对于python的数据类型不够熟,自己写的都报错,改改答案的,不明觉厉。明天得好好看讲解还有翻书查文档补一下。
  4. 提示里说的运用所学去反爬取吧,还有浏览量的问题,结果我运行着发现不需要反爬取啊,而且浏览量也和其他元素一样顺利抓取了。。。是哪里搞错了?很方很方。。。呃,感谢58网站那么给力
  5. 第四课的练习还没完成啊,网址打不开得翻墙,虽然介绍了几个,还没来得及去体验。自己打开花瓣也是这种类型的爬取了一下,发现。。发现。。没有发现规律啊,爬取的功夫还没到位,被专业的反爬取给打败了。
  6. 先交作业,虽然不完美,但是先做出来才能找到差距,这周末继续补一补基础。

代码:

from bs4 import BeautifulSoup
import requests
import time

urls = ['http://bj.58.com/pbdn/0/pn{}/'.format(page) for page in range(1,5)]

def get_link(url):
    Wb_data = requests.get(url)
    time.sleep(2)
    soup = BeautifulSoup(Wb_data.text, 'lxml')
    links= soup.select('#infolist > div.infocon > table > tbody > tr.zzinfo > td.t > a.t')
    for link in links:
        href = link.get('href')
        get_detail_info(href)

def get_detail_info(url,data=None):
    Wb_data = requests.get(url)
    soup = BeautifulSoup(Wb_data.text,'lxml')

    items = soup.select('#nav > div > span:nth-of-type(4) > a')
    times = soup.select('#index_show > ul.mtit_con_left.fl > li.time')
    prices= soup.select('body > div > div > div > div > div.info_massege.left > div.price_li > span > i')
    qualis= soup.select('body > div > div > div > div > div.info_massege.left > div.biaoqian_li')
    areas = soup.select('body > div > div > div > div > div.info_massege.left > div.palce_li > span > i')
    views = soup.select('body > div > div > div > div > div.box_left_top > p > span.look_time')

    data = {
            'item' :list(items[0].stripped_strings),
            'title':soup.title.text,
            'time' :times[0].text if len(times) > 0 else "",
            'price':prices[0].text if len(prices) > 0 else 0,
            'quali':list(qualis[0].stripped_strings) if len(qualis) > 0 else [],
            'area' :list(areas[0].stripped_strings) if len(areas) > 0 else [],
            'view' :views[0].text if len(views) > 0 else 0
    }
    print(data)

for single_url in urls:
    get_link(single_url)


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,199评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,159评论 25 709
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,993评论 6 342
  • 01 “人的细胞平均七年会完成一次整体的新陈代谢。也就是传说中的七年之痒。不管是爱情还是婚姻进行到第七年,陷入平淡...
    林书薇阅读 533评论 6 10
  • “我们到此结束吧,我给你自由。”静心平静的说道。 许久之后…… “好。” 静心闭上了眼睛,心里的痛只有她自己明白,...
    简悠然阅读 527评论 2 0