def extract_data(html): # 做好ElementTree tree = etree.HTML(html) # 列表ls_content存储发表内容 ls_content = [] # 以列表形式,返回所有包含发表内容的td标签 ls = tree.xpath('//td[@class="postbody"]') #对应发表内容 length = len(ls) j = 0 # 记录抓取评论数 for i in range(length): j += 1 try: ls_content.append(''.join( ls[i].xpath('.//text()')).strip()) # 把每个td标签中的文本放入列表中 except: print('抓取第{}评论出错'.format(j)) continue # 获取用户个人主页网址,最后一个是抓取自己的 ls_urls = tree.xpath('//div[@class="auth"]/a/@href') #名字 如'楼医生' # 用于存储用户个人基本信息 ls_user_info = [] n = 0 for url in ls_urls: n += 1 print("现在开始抓取第{}位用户的主页:{}".format(n, url)) info = get_user_info(str(url)) ls_user_info.append(info) ls_total = list(zip(ls_user_info, ls_content)) #打包成([]列表,''字符串)的元组 print(ls_total[0]) print("恭喜你!成功抓取信息{}条!".format(len(ls_total))) return ls_total
def get_user_info( url ): #从一个人的个人主页中获取['楼医生', '常驻站友', '2', '35', '168', '63', '0', '3', '1'] try: user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 \ (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' headers = {'User-Agent': user_agent} r = requests.get(url, headers=headers) # 爬取完整的网页数据 r.raise_for_status() # 如果状态不是200,引发HTTPError异常 info = [] t = etree.HTML(r.text) # 提取用户名 info.append( t.xpath('//div[@class="banner-inner__user-id pa"]/a/text()')[0]) # 提取用户等级,这里有两种情况,所以用了一个try...except进行处理 try: info.append(t.xpath('//div[@class="user-level-area"]/text()')[0]) except: info.append( t.xpath('//span[@class="level-wrap__level-title mr15"]/text()') [0]) # 提取用户关注数、粉丝数、丁当数 info.extend( t.xpath('//div[@class="follows-fans clearfix"]/div/p/a/text()')) # 提取用户帖子数、精华数、积分数、得票数 info.extend( t.xpath('//div[@class="main-nav-inner"]/ul/li/span[1]/text()')) print(info) return info except: print("访问出错") return "" # 发生异常,返回空字符串
def analyHtml(html): selector = etree.HTML(html) print(html) # //*[@id="content"]/div[1]/div[1]/div[1]/div/p[1]/a houselist = selector.xpath('//*[@id="content"]/div/div/div') # //*[@id="content"]/div[1]/div[1]/div[1]/a/img for house in houselist: print(house.xpath('div/p[1]/a/text()')) data_writer(house.xpath('div/p[1]/a/text()')) print(house.xpath('a/img/@data-src')) img_url = str(house.xpath('a/img/@data-src')) image_saver(trim_str(img_url), 'a')