1. python中如何將通過xpath提取部分html代碼或者有什麼其他方法
xpath
pyquery
bs4都可以,
這幾個的官網都有教程,自己先看看
2. python爬數據,得到一個列表,但怎樣去掉裡面的span標簽
html = """
<span class='red'>item1</span>
<div>
<span id='s1'>item2</span>
</div>
"""
# 使用 scrapy 的Selector
from scrapy.selector import Selector
# scrapy 的選擇器支持 css和xpath選擇。下面是css選擇器。如果你了解前端JQuery的知識,
# 會發現
Selector(text=html).css('span::text').extract()
# 輸出 : ['item1','item2']
Selector(text=html).css('span#s1::text').extract()
# 輸出 : ['item2']
Selector(text=html).css('div>span::text').extract()
# 輸出 : ['item2']
# 使用bs4
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'html.parser')
sl = soup.find_all("span")
result = [span.get_text() for span in sl]
print(result)
# ['item1', 'item2']
3. Python怎樣獲取XPath下的A標簽的內容
1、在瀏覽器中打開網頁。然後//div,就可以找到頁面中的所有div了,因為//表示的是任意目錄下查找。如圖,頁面有兩個div,所以可以找到兩個。
6、斜杠/表示的是獲取子元素,比如div下面有兩個子元素p,那麼//div[2]/p獲取的就是第二個div的子元素p。
4. Python3.6.3 中BeautifSoup過濾標簽中的文本
直接span.string就可以取出代碼里的字元串,包括中文
你在for循環那裡,最後兩行去掉,用print(six.string)代替就行
5. Python中scrapy爬蟲,如何爬取ul標簽下的多個並列的li標簽中的內容,xpath應該怎麼寫
//div[@class="list-wrap"]//li/text()
然後用循環,不然所有內容會混在一起。
6. python爬蟲 xpath多標簽怎麼寫
加上其他條件,或者用element s, link_txt
,contains
7. 如何用python過濾html標簽和准確的提取內容
可以參考這個實例,代碼中有過濾html標簽及提取內容:
Python網頁爬蟲入門——抓取網路貼吧內容實例
http://lovesoo.org/getting-started-python-web-crawler-to-crawl-the--post-bar-content-instance.html
8. python 爬蟲怎麼過濾正文以外的
利用bs4查找所有的div,用正則篩選出每個div裡面的中文,找到中文字數最多的div就是屬於正文的div了。定義一個抓取的頭部抓取網頁內容:
importrequests
headers={
'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/47.0.2526.106Safari/537.36',
'Host':'blog.csdn.net'}
session=requests.session()
defgetHtmlByRequests(url):
headers.update(
dict(Referer=url,Accept="*/*",Connection="keep-alive"))
htmlContent=session.get(url=url,headers=headers).content
returnhtmlContent.decode("utf-8","ignore")
統計文字的正則:
importre
#統計中文字數
defcountContent(string):
pattern=re.compile(u'[u1100-uFFFD]+?')
content=pattern.findall(string)
returncontent
查找每一個div,統計每一個div的文字,只保留文字最多的那個div:
#分析頁面信息
defanalyzeHtml(html):
#初始化網頁
soup=BeautifulSoup(html,"html.parser")
part=soup.select('div')
match=""
forparagraphinpart:
content=countContent(str(paragraph))
iflen(content)>len(match):
match=str(paragraph)
returnmatch
最後的調用幾個函數即可:
defmain():
url="http://blog.csdn.net/"
html=getHtmlByRequests(url)
mainContent=analyzeHtml(html)
soup=BeautifulSoup(mainContent,"html.parser")
print(soup.select('div')[0].text)
9. python 如何過濾 HTML標簽
基於文本文檔(Markdown) 設想好需要的基本需要的表、欄位、類型;
使用 Rails Migration 隨著功能的開發逐內步創建表;
隨著細容節功能的開發、需求,逐步增加欄位,刪除欄位,或者調整欄位類型;
第一個 Release 的時候清理 Migrations 合並成一個;
隨著後期的改動,逐步增加、修改、刪除欄位或表。
基本上我的所有項目都是這么搞的,這和項目是否復雜無關。
10. python 去除html標簽的幾種方法
python去除html標簽的幾種方法,代碼如下:
#!/usr/bin/python
#-*-coding:utf-8-*-
'''
Createdon2015-07-08
@author:Administrator
'''
importre
classFilterTag():
def__init__(self):
pass
deffilterHtmlTag(self,htmlStr):
'''
過濾html中的標簽
:paramhtmlStr:html字元串或是網頁源碼
'''
self.htmlStr=htmlStr
#先過濾CDATA
re_cdata=re.compile('//]*//]]>',re.I)#匹配CDATA
re_script=re.compile('<s*script[^>]*>[^<]*<s*/s*scripts*>',re.I)#Script
re_style=re.compile('<s*style[^>]*>[^<]*<s*/s*styles*>',re.I)#style
re_br=re.compile('')#處理換行
re_h=re.compile(']*>')#HTML標簽
re_comment=re.compile('')#HTML注釋
s=re_cdata.sub('',htmlStr)#去掉CDATA
s=re_script.sub('',s)#去掉SCRIPT
s=re_style.sub('',s)#去掉style
s=re_br.sub(' ',s)#將br轉換為換行
blank_line=re.compile(' +')#去掉多餘的空行
s=blank_line.sub(' ',s)
s=re_h.sub('',s)#去掉HTML標簽
s=re_comment.sub('',s)#去掉HTML注釋
#去掉多餘的空行
blank_line=re.compile(' +')
s=blank_line.sub(' ',s)
filterTag=FilterTag()
s=filterTag.replaceCharEntity(s)#替換實體
prints
defreplaceCharEntity(self,htmlStr):
'''
替換html中常用的字元實體
使用正常的字元替換html中特殊的字元實體
可以添加新的字元實體到CHAR_ENTITIES中
CHAR_ENTITIES是一個字典前面是特殊字元實體後面是其對應的正常字元
:paramhtmlStr:
'''
self.htmlStr=htmlStr
CHAR_ENTITIES={'nbsp':'','160':'',
'lt':'<','60':'<',
'gt':'>','62':'>',
'amp':'&','38':'&',
'quot':'"','34':'"',}
re_charEntity=re.compile(r'&#?(?Pw+);')
sz=re_charEntity.search(htmlStr)
whilesz:
entity=sz.group()#entity全稱,如>
key=sz.group('name')#去除&;後的字元如(""--->key="nbsp")去除&;後entity,如>為gt
try:
htmlStr=re_charEntity.sub(CHAR_ENTITIES[key],htmlStr,1)
sz=re_charEntity.search(htmlStr)
exceptKeyError:
#以空串代替
htmlStr=re_charEntity.sub('',htmlStr,1)
sz=re_charEntity.search(htmlStr)
returnhtmlStr
defreplace(self,s,re_exp,repl_string):
returnre_exp.sub(repl_string)
defstrip_tags(self,htmlStr):
'''
使用HTMLParser進行html標簽過濾
:paramhtmlStr:
'''
self.htmlStr=htmlStr
htmlStr=htmlStr.strip()
htmlStr=htmlStr.strip(" ")
result=[]
parser=HTMLParser()
parser.handle_data=result.append
parser.feed(htmlStr)
parser.close()
return''.join(result)
defstripTagSimple(self,htmlStr):
'''
最簡單的過濾html<>標簽的方法注意必須是<任意字元>而不能單純是<>
:paramhtmlStr:
'''
self.htmlStr=htmlStr
#dr=re.compile(r'<[^>]+>',re.S)
dr=re.compile(r']*>',re.S)
htmlStr=re.sub(dr,'',htmlStr)
returnhtmlStr
if__name__=='__main__':
#s=file('Google.html').read()
filters=FilterTag()
printfilters.stripTagSimple("<1>你好")