不多说了,上代码,看注释吧,写的够详细了
# encoding: utf-8 #加载bs4、urllib2 from bs4 import BeautifulSoup import urllib2 import codecs import re import sys import types #定义一个方法,方法的作用提交url并获取到到此url的html页面源码 def header (url): user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36' header = {'User-Agent':'user_agent'} #把url、header穿过去 re = urllib2.Request(url,headers=header) respone = urllib2.urlopen(re,'html.parser') #获取html代码,保存到htmlcode,一个字符串 htmlcode = respone.read() return htmlcode #定义一个把爬取到的内容,写入到文本的方法 def file_save(file_name,text): #由于开始文本是不存在的,所以使用w,进行检查如果不存在就创建,如果是r,那么就是追加 f = open(file_name,'w') #把list写入到file_name里面,并且list进行换行,注意的是用join,据说效率比+ 高 f.write('\n'.join(text)) #关闭文件 f.close() #定义一个方法,接受三个参数、url、开始也、结束页 def load_url(url,begin_page,end_page): #加载这个,是解决utf8的问题 reload(sys) sys.setdefaultencoding('utf8') #拼接url,重点重点,搞了好长时间 for i in range(begin_page,end_page+1): zcurl = url + str(i) zc_html_code = header(zcurl) #这里是一个列表了 st = st_html(zc_html_code) print st file_name = str(i) + '.txt' file_save(file_name,st) #定义爬取规则的方法 def st_html(text): soup = BeautifulSoup(text,'html.parser') #这段代码的意思,先用find查找第一个table,然后在table里面查找target find_html = soup.find('table','table_body').find_all(attrs={'target':'_blank'}) #find_html = soup.find_all(attrs={'target':'_blank'}).string #因为要return回去,所以先创建一个空的列表 list = [] for i in find_html: #注意。.get_text获取文本,如果获取url,参照上一篇的文章,i['herf] a = i.get_text() list.append(a) #返回列表,load_url要调用 return list url = 'https://www.chinabidding.cn/search/searchzbw/search2?rp=22&categoryid=1&keywords=轨道交通&page=' begin_page = input("请输入开始页的id:") end_page = input("请输入结束页的id:") load_url(url,begin_page,end_page)