新建项目maoyantop100
在项目文件下新建爬虫文件spider.py,在里面输入:
import json
from multiprocessing import Pool
import request
from requests.exceptions import RequestException
def get_one_page(url):
try:
response=request.get(url)
if responese.status_code==200:
return response.text
rerurn None
except RequestException:
rerurn None
def parse_one_page(html):
#<dd>用来找到起始点,
#.*?board-index.*?<\d+>用来找到排名
#</i>代表结束符
#.*?data-src="(.*?)"用来匹配图片
#.*?name"><a' +'.*?>(.*?)</a>用来匹配name
#.*?star">(.*?)</p>用来匹配star
#.*?releasetime">(.*?)</p>用来匹配releasetime
#.*?integer">(.*?)</i>用来匹配integer
#.*?fraction">(.*?)</i>用来匹配fraction
#re.S可以匹配到换行符
pattern=re.compile('<dd>.*?board-index.*?<\d+></i>.*?data-src"(.*?)".*?name"><a'
+'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
+'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
items=re.findall(pattern,html)
print(items)
#多元数组形式的items转换成字典形式进行存储
for item in items:
yield{
'index':item[0],
'image':item[1],
'title':item[2],
#主演进行切片,去掉主演和冒号3个字符
'actor':item[3].strip()[3:],
#时间进行切片,去掉上映时间和冒号五个字符
'time':item[4].stip()[5:]
'score':item[5]+item[6]
}
def write_to_file(content):
#encoding='utf-8'保证输出为中文
#ensure_ascii=False保证输出为中文
with open('result.txt','a',encoding='utf-8') as f :
#用json.dumps方法把字典形式的content转化为字符串形式
#'\n'代表换行符
f.write(json.dumps(content,ensure_ascii=False)+'\n')
f.close()
# offset作为参数传入main方法
def main(offset):
url='http://maoyan.com/board/4?offset='+str(offset)
html=get_one_page(url)
parse_one_page(html)
for item in parse_one_page(html):
write_to_file(item)
print(html)
if _name_ ==_main_:
pool=Pool()#声明一个进程池
#进程池的两个参数,一个是main方法,一个是数组
pool.map(main,[i*10 for in range(10)])