好久之前就研究过正则与Xpath ,一直也没做记录
今天记录下,以备随时查阅
上代码片段,抓取的是 豆瓣的TOP250 电影信息,网址为
https://movie.douban.com/top250?start=0&filter=
正则:
def spider(self,html):
pa_id = re.compile('<em class.*?>(.*?)</em>', re.S)
#抓取ID号(另一种写法)
pa_url = re.compile('<div.*?hd.*?href="(.*?)"', re.S)
#抓取RUL(正则标准写法)
pa_pic = re.compile('<img.*?100.*?src="(.*?)".*?', re.S)
#抓取封面图(正则标准写法)
pa_title=re.compile('<div class="hd">(.*?)</a>',re.S)
#抓取电影名(另一种写法,跟上面几个不一样)
print(re.findall(pa_title,html))
我这里是测试,如果想顺序输出,直接把正则写到一起就好
发现没,第一个和第四个,好简单,直接复制代码就能抓取,有点像Xpath 的抓取方式
Xpath:
def spider(self,html):
html1=etree.HTML(html)
li_list=html1.xpath("//ol[@class='grid_view']/li")
for i in li_list:
movies_title=i.xpath(".//span[@class='title']/text()")
movies_director1 = i.xpath(".//div[@class='bd']/p/text()")
str1=str(movies_director1).replace("\\n", "").split()
testobj.append((movies_title,str1))
print(testobj)
from lxml import etree import requests headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"} testobj=[] class douban(object): def __init__(self): pass def get_url(self,url): rer = requests.request("get", url, headers=headers) if rer.status_code==200: return rer.text return None def spider(self,html): html1=etree.HTML(html) li_list=html1.xpath("//ol[@class='grid_view']/li") for i in li_list: movies_title=i.xpath(".//span[@class='title']/text()") movies_director1 = i.xpath(".//div[@class='bd']/p/text()") str1=str(movies_director1).replace("\\n", "").split() testobj.append((movies_title,str1)) print(testobj) url = "https://movie.douban.com/top250?start=0&filter=" douban = douban() html=douban.get_url(url) douban.spider(html)