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