week1-爬取58同城二手商品数据

学习Python爬虫的第一周,完成了爬取58同城个人二手列表页中除转转和推广商品之外的正常商品数据。

最终成果是这样的:
week1.png
我的代码:
from bs4 import BeautifulSoup
import requests
import time

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36'
}

# 获得从第几页到第几页的所有详情页信息
def get_more_page(start, end):
    urls = ['http://bj.58.com/pbdn/0/pn{}/?PGTID=0d305a36-0000-13b2-d376-d5d8f54e0130&ClickID=2'.format(str(i)) for i in
            range(start, end)]
    for url in urls:
        get_detail_urls(url)
        time.sleep(2)

page_links = []
# 获得每一页的所有详情页信息(除推广商品\转转商品之外)
def get_detail_urls(url):
    wb_data = requests.get(url, headers=headers)
    soup = BeautifulSoup(wb_data.text, 'lxml')
    detail_urls = soup.select('td.t > a.t')
    for url in detail_urls:
        if 'zhuanzhuan' in url.get('href'):
            pass
        elif 'jump.zhineng' in url.get('href'):
            pass
        else:
            page_links.append(url.get('href'))
    for link in page_links:
        get_detail(link)

# 获得某个详情页的浏览数
def get_views(url):
    id = url.split('/')[-1].strip('x.shtml')
    api = 'http://jst1.58.com/counter?infoid={}'.format(id)
    js = requests.get(api)
    views = js.text.split('=')[-1]
    return views

# 获得某个详情页的信息(类目category,标题title,发布时间release_time,价格price,成色state,区域area,浏览量views)
def get_detail(url):
    wb_data = requests.get(url, headers=headers)
    soup = BeautifulSoup(wb_data.text, 'lxml')

    category = soup.select('div.breadCrumb.f12 > span:nth-of-type(3) > a')[0].text
    title = soup.select('div.col_sub.mainTitle > h1')[0].text
    release_time = soup.select('li.time')[0].text
    price = soup.select('div.col_sub.sumary > ul > li:nth-of-type(1) > div.su_con > span')[0].text
    state = soup.select('div.col_sub.sumary > ul > li:nth-of-type(2) > div.su_con > span')[0].text.strip()
    if soup.find_all('span', 'c_25d'):
        area = soup.select(' span.c_25d')[0].text.strip()
        if '-' in area:
            area = area.split('-')[0].strip() + '-' + area.split('-')[-1].strip()
        else:
            area = area
    else:
        area = None
    data = {
        'category': category,
        'title': title,
        'release_time': release_time,
        'price': price,
        'state': state,
        'area': area,
        'views': get_views(url) 
    }
    print(data)

# 获取1页,除推广商品和转转商品之外,所有商品详情页信息
get_more_page(1, 2)
总结:
  • 了解了网页的结构,客户端与服务器交互的机制。对于一个网页来说,HTML描述了网页的结构,CSS描述了网页的样式,JavaScript描述了网页的功能,而爬取网页的要点是根据网页结构描述元素的位置。通过CSS Selector可以获取元素的位置和属性。
  • 学习了requests和beautifulsoup库的基本用法。通过requests的get方法获取HTML,并用beautiful soup解析网页,通过元素的唯一特征来获得所需数据。
  • 了解了异步加载的原理。对于异步加载的数据,用抓包工具分析出异步请求的URL,点击刷新网页,观察哪个url返回的值包含浏览量,然后拼接URL解析数据。
  • 请求时可以通过传入headers,伪造cookies模拟已登录状态,改变user-agent模拟移动端的数据,来防止被反爬。同时针对大量数据的爬取应在每次请求之间加访问延时以防止访问频率限制。
问题:

商品详情页中的浏览量,通过异步加载,如何判断该属性在哪个响应资源文件中?
浏览量的问题:通过在header中添加Referer,Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。这样就可以反‘反盗链’了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容