Gointerface接口声明实现及作用详解
286
2022-08-31
利用python爬虫(案例2)--X凰的一天(Python爬虫笔记)
学习笔记 PS:为啥这个BLOG是案例2,但是我的BLOG里没有案例1,那是因为BLOG1被锁了。心痛。
爬取新闻标题和链接
我想通过Xpath拿到X凰X闻[open('html_data.txt', 'r') as f: html = f.read()
这时,我们可以用二进制读取方式进行读取,再用utf-8编码格式,进行解码。
完整代码如下:
# -*- coding: utf-8 -*-from lxml import etreeimport pymysqlclass FenghuangXpath: def __init__(self): self.db = pymysql.connect(host = '127.0.0.1', port = 3306, user = 'root', password = '19970928', database = 'datacup', charset = 'utf8') self.cur = self.db.cursor() def get_page(self): with open('html_data.txt', 'rb') as f: html = f.read().decode('utf-8') self.parse_page(html) def parse_page(self, html): link_xpath = \'//ul[@class="news-stream-basic-news-list"]/li[@class="news-stream-newsStream-news-item-has-image clearfix news_item"]//h2/a/@href' name_xpath = \'//ul[@class="news-stream-basic-news-list"]/li[@class="news-stream-newsStream-news-item-has-image clearfix news_item"]//h2/a/text()' parse_html = etree.HTML(html) link_list = parse_html.xpath(link_xpath) link_list = ['for i in link_list] name_list = parse_html.xpath(name_xpath) data_zip = zip(name_list, link_list) self.write_data(data_zip) def write_data(self, data_zip): sql = 'insert into news_table(name, news_link) \ values(%s, %s);' try: self.cur.executemany(sql, data_zip) self.db.commit() except Exception as e: self.db.rollback() print('错误信息:', e) def main(self): self.get_page() self.cur.close() self.db.close() if __name__ == '__main__': fengh = FenghuangXpath() fengh.main()
查看news_table数据表内的数据:
很好,都导入了! 但是知道为啥id不是从1开始么?因为我在创建news_table表时,设置id为主键且自动增大。此时,我们就算不传输id值,mysql也会自动帮我们填好id值。那这和id为7有啥关系呢?那是因为博主以为偷懒,在利用python传数据时只传递了name和news_link字段,id字段让mysql自动帮博主填写了。
所以,当3条新闻记录第1次导入news_table时,id的确是从1开始的,但是由于博主是个傻子,代码敲错了n次,导致传入的记录总是不符合要求,所以博主不停的把mysql数据库里news_table表里的数据删了又删,直至第3次,导入的数据终于符合要求了,但是此时mysql给我们传入的id值就是从7开始排列了。悲伤的故事。。。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~