大数据孤儿的学习记录,一些学习日常,希望路过的大佬们提提意见。
-
第一个有点样子的爬虫程序
学了定向爬虫后,找了猫眼电影练了一下手,得到了即将上映的30部电影的信息,代码如下:
import requests
import bs4
from bs4 import BeautifulSoup
#获取网页内容
url = "https://www.maoyan.com/films?showType=2&sortId=2"
hd = {'user-agent':'Chrome/10'}
r = requests.get(url,timeout=30,headers=hd)
r.encoding = r.apparent_encoding
html = r.text
#bs4解析网页内容
datalist = [] #创建空列表,存储内容
soup = BeautifulSoup(html,"html.parser")
for div in soup.find_all('div',"movie-hover-info"): #通过网页源代码找到目标数据所在的标签
if isinstance(div,bs4.element.Tag):
divs = div('div')
divs[1].span.decompose() #标签div中有子标签span,这里将span标签删除,把多余的字符串去掉。
divs[2].span.decompose()
divs[3].span.decompose()
datalist.append([divs[0].text.strip(),divs[1].text.strip(),divs[2].text.strip(),divs[3].text.strip()]) #没有用string方法,因为标签中的字符串存在空格,会发生报错,要先删去空格
#将解析的网页内容打印出来
num = len(datalist)
print("{0:^10}\t{1:^10}\t{2:{4}^10}\t{3:^10}".format("电影名称","电影类型","电影主演","上映时间",chr(12288)))
for i in range(num):
d = datalist[i]
print("{0:^10}\t{1:^10}\t{2:{4}^10}\t{3:^10}".format(d[0],d[1],d[2],d[3],chr(12288)))
-
实验结果
-
学习中遇到的坑
1.网页有一定的反爬机制,多次爬取网站,会被识别出来是爬虫。能够正常访问网站(status_code返回200),但是无法获取网页内容,需要进入网页完成验证。
2.现在的网页源代码中字符串的信息往往伴有空格存在,经常会导致一些方法无法调用,如string,会返回错误(‘NoneType’ object is not callable)
3.要明确目标标签的位置,否则一顿解析猛如虎,结果返回全是空。